diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-07-16 15:38:40 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-07-16 15:38:40 +0200 |
| commit | ca473b06dcb01e014d54c98e6718f9a5fda98910 (patch) | |
| tree | 6a72839061bf7d8b8e3aeee8eb6670f791dd0b03 /src/custommem.c | |
| parent | 2ee02307934a56fc644f46b3e8afcc07e7b568c8 (diff) | |
| download | box64-ca473b06dcb01e014d54c98e6718f9a5fda98910.tar.gz box64-ca473b06dcb01e014d54c98e6718f9a5fda98910.zip | |
[DYNAREC] Fixed a potential deadlock (for #64, thx again)
Diffstat (limited to 'src/custommem.c')
| -rw-r--r-- | src/custommem.c | 4 |
1 files changed, 3 insertions, 1 deletions
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; } |