]> granicus.if.org Git - python/commitdiff
Issue #13483: Use VirtualAlloc in obmalloc on Windows.
authorMartin v. Löwis <martin@v.loewis.de>
Thu, 27 Jun 2013 10:23:29 +0000 (12:23 +0200)
committerMartin v. Löwis <martin@v.loewis.de>
Thu, 27 Jun 2013 10:23:29 +0000 (12:23 +0200)
Misc/NEWS
Objects/obmalloc.c

index bc825dc0f46bcf9cf438a531465c0d4ac4550083..dacbf1c52ff7210211bafc3f8e7e95d7187c234a 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,8 @@ What's New in Python 3.4.0 Alpha 1?
 Core and Builtins
 -----------------
 
+- Issue #13483: Use VirtualAlloc in obmalloc on Windows.
+
 - Issue #18184: PyUnicode_FromFormat() and PyUnicode_FromFormatV() now raise
   OverflowError when an argument of %c format is out of range.
 
index 3028f225ae709f8957826322b476dc3e83ac4abe..3fac6d4bceed56ef376897580246b7854f09c5a7 100644 (file)
@@ -9,6 +9,10 @@
  #endif
 #endif
 
+#ifdef MS_WINDOWS
+#include <windows.h>
+#endif
+
 #ifdef WITH_VALGRIND
 #include <valgrind/valgrind.h>
 
@@ -598,7 +602,11 @@ new_arena(void)
     arenaobj = unused_arena_objects;
     unused_arena_objects = arenaobj->nextarena;
     assert(arenaobj->address == 0);
-#ifdef ARENAS_USE_MMAP
+#ifdef MS_WINDOWS
+    address = (void*)VirtualAlloc(NULL, ARENA_SIZE,
+                                 MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
+    err = (address == NULL);
+#elif defined(ARENAS_USE_MMAP)
     address = mmap(NULL, ARENA_SIZE, PROT_READ|PROT_WRITE,
                                    MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
     err = (address == MAP_FAILED);
@@ -1093,7 +1101,9 @@ PyObject_Free(void *p)
                 unused_arena_objects = ao;
 
                 /* Free the entire arena. */
-#ifdef ARENAS_USE_MMAP
+#ifdef MS_WINDOWS
+                VirtualFree((void *)ao->address, 0, MEM_RELEASE);
+#elif defined(ARENAS_USE_MMAP)
                 munmap((void *)ao->address, ARENA_SIZE);
 #else
                 free((void *)ao->address);