[Python-checkins] cpython: Issue #13483: Use VirtualAlloc in obmalloc on Windows.

martin.v.loewis python-checkins at python.org
Thu Jun 27 12:24:21 CEST 2013


http://hg.python.org/cpython/rev/44f455e6163d
changeset:   84352:44f455e6163d
user:        Martin v. Löwis <martin at v.loewis.de>
date:        Thu Jun 27 12:23:29 2013 +0200
summary:
  Issue #13483: Use VirtualAlloc in obmalloc on Windows.

files:
  Misc/NEWS          |   2 ++
  Objects/obmalloc.c |  14 ++++++++++++--
  2 files changed, 14 insertions(+), 2 deletions(-)


diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,8 @@
 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.
 
diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c
--- a/Objects/obmalloc.c
+++ b/Objects/obmalloc.c
@@ -9,6 +9,10 @@
  #endif
 #endif
 
+#ifdef MS_WINDOWS
+#include <windows.h>
+#endif
+
 #ifdef WITH_VALGRIND
 #include <valgrind/valgrind.h>
 
@@ -598,7 +602,11 @@
     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 @@
                 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);

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list