about summary refs log tree commit diff stats
path: root/src/custommem.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-07-16 22:53:36 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-07-16 22:53:47 +0200
commit33381857ff133918a56e3afdded4ac5eefff9f9d (patch)
tree2b7f0f13b89451735815ebbdbf0b26f25be7f536 /src/custommem.c
parentf1abd95ed06e42bf67dd267ddbf506b8b59c399b (diff)
downloadbox64-33381857ff133918a56e3afdded4ac5eefff9f9d.tar.gz
box64-33381857ff133918a56e3afdded4ac5eefff9f9d.zip
Change (again) how Wine prereserved memory is allocated and freed
Diffstat (limited to 'src/custommem.c')
-rw-r--r--src/custommem.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/custommem.c b/src/custommem.c
index 3f650485..84265816 100644
--- a/src/custommem.c
+++ b/src/custommem.c
@@ -1338,14 +1338,17 @@ void loadProtectionFromMap()
     box64_mapclean = 1;
 }
 
+int isAddrInPrereserve(uintptr_t addr);
 void freeProtection(uintptr_t addr, size_t size)
 {
     size = ALIGN(size);
     addr &= ~(box64_pagesize-1);
     dynarec_log(LOG_DEBUG, "freeProtection %p:%p\n", (void*)addr, (void*)(addr+size-1));
     LOCK_PROT();
-    rb_unset(mapallmem, addr, addr+size);
-    rb_unset(mmapmem, addr, addr+size);
+    if(!isAddrInPrereserve(addr)) {
+        rb_unset(mapallmem, addr, addr+size);
+        rb_unset(mmapmem, addr, addr+size);
+    }
     rb_unset(memprot, addr, addr+size);
     UNLOCK_PROT();
 }