diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-04-14 18:06:04 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-04-14 18:06:04 +0200 |
| commit | fd939c6fce61627137cb184c8eaad618f68efdf5 (patch) | |
| tree | d82603bc36efba8b77f8f172428fc53ca72ac4a1 /src/libtools | |
| parent | 82755b5ef2a4409faf2e44cbc755950d087a627a (diff) | |
| download | box64-fd939c6fce61627137cb184c8eaad618f68efdf5.tar.gz box64-fd939c6fce61627137cb184c8eaad618f68efdf5.zip | |
Also handle internal mutex in my_sighandler
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 |