summaryrefslogtreecommitdiffstats
path: root/Programs
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-11-29 16:20:38 (GMT)
committerGitHub <noreply@github.com>2017-11-29 16:20:38 (GMT)
commit5d39e0429029324cae90bba2f19fb689b007c7d6 (patch)
treed414a4bc635c750d07c93d94835d932d3524c062 /Programs
parentc15bb49d71f97d400b295d88e5b075e89cb8ba20 (diff)
downloadcpython-5d39e0429029324cae90bba2f19fb689b007c7d6.zip
cpython-5d39e0429029324cae90bba2f19fb689b007c7d6.tar.gz
cpython-5d39e0429029324cae90bba2f19fb689b007c7d6.tar.bz2
bpo-32030: Rework memory allocators (#4625)
* Fix _PyMem_SetupAllocators("debug"): always restore allocators to the defaults, rather than only caling _PyMem_SetupDebugHooks(). * Add _PyMem_SetDefaultAllocator() helper to set the "default" allocator. * Add _PyMem_GetAllocatorsName(): get the name of the allocators * main() now uses debug hooks on memory allocators if Py_DEBUG is defined, rather than calling directly malloc() * Document default memory allocators in C API documentation * _Py_InitializeCore() now fails with a fatal user error if PYTHONMALLOC value is an unknown memory allocator, instead of failing with a fatal internal error. * Add new tests on the PYTHONMALLOC environment variable * Add support.with_pymalloc() * Add the _testcapi.WITH_PYMALLOC constant and expose it as support.with_pymalloc(). * sysconfig.get_config_var('WITH_PYMALLOC') doesn't work on Windows, so replace it with support.with_pymalloc(). * pythoninfo: add _testcapi collector for pymem
Diffstat (limited to 'Programs')
-rw-r--r--Programs/python.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/Programs/python.c b/Programs/python.c
index 707e38f..22d55bb 100644
--- a/Programs/python.c
+++ b/Programs/python.c
@@ -33,12 +33,9 @@ main(int argc, char **argv)
exit(1);
}
- /* Force malloc() allocator to bootstrap Python */
-#ifdef Py_DEBUG
- (void)_PyMem_SetupAllocators("malloc_debug");
-# else
- (void)_PyMem_SetupAllocators("malloc");
-# endif
+ /* Force default allocator, to be able to release memory above
+ with a known allocator. */
+ _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, NULL);
argv_copy = (wchar_t **)PyMem_RawMalloc(sizeof(wchar_t*) * (argc+1));
argv_copy2 = (wchar_t **)PyMem_RawMalloc(sizeof(wchar_t*) * (argc+1));
@@ -98,13 +95,9 @@ main(int argc, char **argv)
status = Py_Main(argc, argv_copy);
- /* Force again malloc() allocator to release memory blocks allocated
- before Py_Main() */
-#ifdef Py_DEBUG
- (void)_PyMem_SetupAllocators("malloc_debug");
-# else
- (void)_PyMem_SetupAllocators("malloc");
-# endif
+ /* Py_Main() can change PyMem_RawMalloc() allocator, so restore the default
+ to release memory blocks allocated before Py_Main() */
+ _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, NULL);
for (i = 0; i < argc; i++) {
PyMem_RawFree(argv_copy2[i]);