about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-04-14 18:06:04 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-04-14 18:06:04 +0200
commitfd939c6fce61627137cb184c8eaad618f68efdf5 (patch)
treed82603bc36efba8b77f8f172428fc53ca72ac4a1
parent82755b5ef2a4409faf2e44cbc755950d087a627a (diff)
downloadbox64-fd939c6fce61627137cb184c8eaad618f68efdf5.tar.gz
box64-fd939c6fce61627137cb184c8eaad618f68efdf5.zip
Also handle internal mutex in my_sighandler
-rwxr-xr-xsrc/libtools/signals.c7
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