From 3f1c37aa76ff13d90e60eb66c4516f8feebaf3f5 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sat, 3 Dec 2022 11:24:01 +0100 Subject: [DYNAREC] Reworked dynarec memory allocator, and a bit of protection tracking too (might help #455) --- src/libtools/signals.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/libtools') diff --git a/src/libtools/signals.c b/src/libtools/signals.c index 657cdad3..394c67db 100755 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -910,6 +910,27 @@ dynarec_log(/*LOG_DEBUG*/LOG_INFO, "Repeated SIGSEGV with Access error on %p for glitch_addr = NULL; glitch_prot = 0; } + if(addr && pc && ((prot&(PROT_READ|PROT_WRITE))==(PROT_READ|PROT_WRITE))) { + static void* glitch2_pc = NULL; + static void* glitch2_addr = NULL; + static int glitch2_prot = 0; + if((glitch2_pc!=pc || glitch2_addr!=addr || glitch2_prot!=prot)) { + dynarec_log(LOG_INFO, "Is that a multi process glitch too?\n"); + //printf_log(LOG_INFO, "Is that a multi process glitch too?\n"); + glitch2_pc = pc; + glitch2_addr = addr; + glitch2_prot = prot; + sched_yield(); // give time to the other process + refreshProtection((uintptr_t)addr); + relockMutex(Locks); + sched_yield(); // give time to the other process + pthread_mutex_unlock(&mutex_dynarec_prot); + return; // try again + } + glitch2_pc = NULL; + glitch2_addr = NULL; + glitch2_prot = 0; + } pthread_mutex_unlock(&mutex_dynarec_prot); } if(!db_searched) -- cgit 1.4.1