From fd939c6fce61627137cb184c8eaad618f68efdf5 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Wed, 14 Apr 2021 18:06:04 +0200 Subject: Also handle internal mutex in my_sighandler --- src/libtools/signals.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/libtools/signals.c b/src/libtools/signals.c index badb81c4..fd5f643e 100755 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -376,7 +376,7 @@ EXPORT int my_sigaltstack(x64emu_t* emu, const x64_stack_t* ss, x64_stack_t* oss void my_sighandler(int32_t sig) { - pthread_mutex_unlock(&my_context->mutex_trace); // just in case + int Locks = unlockMutex(); printf_log(LOG_DEBUG, "Sighanlder for signal #%d called (jump to %p)\n", sig, (void*)my_context->signals[sig]); // save values x64emu_t *emu = thread_get_emu(); @@ -400,11 +400,14 @@ void my_sighandler(int32_t sig) emu->eflags.x64 = old_flags; for(int i=0; i<16; ++i) emu->regs[i].q[0] = old_regs[i]; - if(exits) + if(exits) { + relockMutex(Locks); exit(ret); + } // what about the restored regs? if(restorer) RunFunctionHandler(&exits, restorer, 0); + relockMutex(Locks); } #ifdef DYNAREC -- cgit 1.4.1