diff options
Diffstat (limited to 'src/libtools')
| -rwxr-xr-x | src/libtools/signals.c | 7 |
1 files changed, 5 insertions, 2 deletions
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 |