about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/dynablock.c13
-rw-r--r--src/dynarec/dynarec_native.c4
-rw-r--r--src/include/dynablock.h1
-rw-r--r--src/libtools/signals.c1
4 files changed, 5 insertions, 14 deletions
diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c
index d603fdd9..28906f96 100644
--- a/src/dynarec/dynablock.c
+++ b/src/dynarec/dynablock.c
@@ -221,16 +221,6 @@ void cancelFillBlock()
     LongJmp(GET_JUMPBUFF(dynarec_jmpbuf), 1);
 }
 
-#ifndef WIN32
-static int critical_filled = 0;
-static sigset_t critical_prot = {0};
-sigset_t old_sig = {0};
-#endif
-
-void cancelFillBlockCriticalSection()
-{
-    pthread_sigmask(SIG_SETMASK, &old_sig, NULL);
-}
 /* 
     return NULL if block is not found / cannot be created. 
     Don't create if create==0
@@ -248,6 +238,9 @@ static dynablock_t* internalDBGetBlock(x64emu_t* emu, uintptr_t addr, uintptr_t
     }
 
     #ifndef WIN32
+    static int critical_filled = 0;
+    static sigset_t critical_prot = {0};
+    sigset_t old_sig = {0};
     if(!critical_filled) {
         critical_filled = 1;
         sigfillset(&critical_prot);
diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c
index 961ba441..e73870c5 100644
--- a/src/dynarec/dynarec_native.c
+++ b/src/dynarec/dynarec_native.c
@@ -493,10 +493,8 @@ void CancelBlock64(int need_lock)
     }
     current_helper = NULL;
     redundant_helper = NULL;
-    if(need_lock) {
+    if(need_lock)
         mutex_unlock(&my_context->mutex_dyndump);
-        cancelFillBlockCriticalSection();
-    }
 }
 
 uintptr_t native_pass0(dynarec_native_t* dyn, uintptr_t addr, int alternate, int is32bits, int inst_max);
diff --git a/src/include/dynablock.h b/src/include/dynablock.h
index 42bf34b5..650e18cd 100644
--- a/src/include/dynablock.h
+++ b/src/include/dynablock.h
@@ -20,7 +20,6 @@ dynablock_t* DBAlternateBlock(x64emu_t* emu, uintptr_t addr, uintptr_t filladdr,
 
 // for use in signal handler
 void cancelFillBlock(void);
-void cancelFillBlockCriticalSection(void);
 
 // clear instruction cache on a range
 void ClearCache(void* start, size_t len);
diff --git a/src/libtools/signals.c b/src/libtools/signals.c
index a05b6491..fcf7e7e9 100644
--- a/src/libtools/signals.c
+++ b/src/libtools/signals.c
@@ -1568,6 +1568,7 @@ void my_box64signalhandler(int32_t sig, siginfo_t* info, void * ucntx)
                 if(Locks & is_dyndump_locked)
                     CancelBlock64(1);
                 emu->test.clean = 0;
+                // will restore unblocked Signal flags too
                 #ifdef ANDROID
                 siglongjmp(*(JUMPBUFF*)emu->jmpbuf, 2);
                 #else