From: Martin v. Löwis Date: Thu, 27 Jun 2013 10:23:29 +0000 (+0200) Subject: Issue #13483: Use VirtualAlloc in obmalloc on Windows. X-Git-Tag: v3.4.0a1~379 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cd83fa8c3e8509418215c55b89e52160dc38e50d;p=python Issue #13483: Use VirtualAlloc in obmalloc on Windows. --- diff --git a/Misc/NEWS b/Misc/NEWS index bc825dc0f4..dacbf1c52f 100644 --- 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. diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c index 3028f225ae..3fac6d4bce 100644 --- a/Objects/obmalloc.c +++ b/Objects/obmalloc.c @@ -9,6 +9,10 @@ #endif #endif +#ifdef MS_WINDOWS +#include +#endif + #ifdef WITH_VALGRIND #include @@ -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);