From ca473b06dcb01e014d54c98e6718f9a5fda98910 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Fri, 16 Jul 2021 15:38:40 +0200 Subject: [DYNAREC] Fixed a potential deadlock (for #64, thx again) --- src/custommem.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/custommem.c b/src/custommem.c index 8424ea1b..a2c3e992 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -432,10 +432,11 @@ uintptr_t AllocDynarecMap(dynablock_t* db, size_t size) if(!size) return 0; if(size>MMAPSIZE-2*sizeof(blockmark_t)) { - #ifndef USE_MMAP pthread_mutex_lock(&mutex_mmap); + #ifndef USE_MMAP void *p = NULL; if(posix_memalign(&p, box64_pagesize, size)) { + pthread_mutex_unlock(&mutex_mmap); dynarec_log(LOG_INFO, "Cannot create dynamic map of %zu bytes\n", size); return 0; } @@ -443,6 +444,7 @@ uintptr_t AllocDynarecMap(dynablock_t* db, size_t size) #else void* p = mmap(NULL, size, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); if(p==(void*)-1) { + pthread_mutex_unlock(&mutex_mmap); dynarec_log(LOG_INFO, "Cannot create dynamic map of %zu bytes\n", size); return 0; } -- cgit 1.4.1