diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-10-16 11:00:07 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-10-16 11:00:07 +0200 |
| commit | b40cb7b84a1a404a0d2b042791d9133bde3f1b77 (patch) | |
| tree | 841823ebc7ac61b2cd3ba5ee6e8a3bb177d4dca0 /src/dynarec/dynablock.c | |
| parent | d0045b158b30434c2077693d970e2167a1089e84 (diff) | |
| download | box64-b40cb7b84a1a404a0d2b042791d9133bde3f1b77.tar.gz box64-b40cb7b84a1a404a0d2b042791d9133bde3f1b77.zip | |
[DYNAREC] Fixed potential issue with signel not being re-enabled after FillBlock64 got canceled in a signal handler
Diffstat (limited to 'src/dynarec/dynablock.c')
| -rw-r--r-- | src/dynarec/dynablock.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c index 28906f96..d603fdd9 100644 --- a/src/dynarec/dynablock.c +++ b/src/dynarec/dynablock.c @@ -221,6 +221,16 @@ 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 @@ -238,9 +248,6 @@ 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); |