bpo-36142: Add _PyMem_GetDebugAllocatorsName() (GH-12185)
The development mode now uses the effective name of the debug memory allocator ("pymalloc_debug" or "malloc_debug"). So the name doesn't change after setting the memory allocator.
This commit is contained in:
parent
d8b3a98c90
commit
a9df651eb4
|
@ -155,6 +155,8 @@ PyAPI_FUNC(int) _PyMem_SetDefaultAllocator(
|
||||||
PyMemAllocatorDomain domain,
|
PyMemAllocatorDomain domain,
|
||||||
PyMemAllocatorEx *old_alloc);
|
PyMemAllocatorEx *old_alloc);
|
||||||
|
|
||||||
|
PyAPI_FUNC(const char*) _PyMem_GetDebugAllocatorsName(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -336,6 +336,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
'legacy_windows_fs_encoding': 0,
|
'legacy_windows_fs_encoding': 0,
|
||||||
'legacy_windows_stdio': 0,
|
'legacy_windows_stdio': 0,
|
||||||
})
|
})
|
||||||
|
DEBUG_ALLOCATOR = 'pymalloc_debug' if support.with_pymalloc() else 'malloc_debug'
|
||||||
|
|
||||||
# main config
|
# main config
|
||||||
COPY_MAIN_CONFIG = (
|
COPY_MAIN_CONFIG = (
|
||||||
|
@ -588,7 +589,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
|
|
||||||
def test_init_env_dev_mode(self):
|
def test_init_env_dev_mode(self):
|
||||||
config = dict(self.INIT_ENV_CONFIG,
|
config = dict(self.INIT_ENV_CONFIG,
|
||||||
allocator='debug',
|
allocator=self.DEBUG_ALLOCATOR,
|
||||||
dev_mode=1)
|
dev_mode=1)
|
||||||
self.check_config("init_env_dev_mode", config)
|
self.check_config("init_env_dev_mode", config)
|
||||||
|
|
||||||
|
@ -596,7 +597,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
config = {
|
config = {
|
||||||
'dev_mode': 1,
|
'dev_mode': 1,
|
||||||
'faulthandler': 1,
|
'faulthandler': 1,
|
||||||
'allocator': 'debug',
|
'allocator': self.DEBUG_ALLOCATOR,
|
||||||
}
|
}
|
||||||
self.check_config("init_dev_mode", config)
|
self.check_config("init_dev_mode", config)
|
||||||
|
|
||||||
|
|
|
@ -221,6 +221,20 @@ static PyMemAllocatorEx _PyObject = PYOBJ_ALLOC;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Get the effective name of "debug" memory allocators,
|
||||||
|
as if _PyMem_GetAllocatorsName() is called after
|
||||||
|
_PyMem_SetupAllocators("debug"). */
|
||||||
|
const char*
|
||||||
|
_PyMem_GetDebugAllocatorsName(void)
|
||||||
|
{
|
||||||
|
#ifdef WITH_PYMALLOC
|
||||||
|
return "pymalloc_debug";
|
||||||
|
#else
|
||||||
|
return "malloc_debug";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pymem_set_default_allocator(PyMemAllocatorDomain domain, int debug,
|
pymem_set_default_allocator(PyMemAllocatorDomain domain, int debug,
|
||||||
PyMemAllocatorEx *old_alloc)
|
PyMemAllocatorEx *old_alloc)
|
||||||
|
|
|
@ -139,6 +139,9 @@ static int test_forced_io_encoding(void)
|
||||||
|
|
||||||
static int test_pre_initialization_api(void)
|
static int test_pre_initialization_api(void)
|
||||||
{
|
{
|
||||||
|
/* the test doesn't support custom memory allocators */
|
||||||
|
putenv("PYTHONMALLOC=");
|
||||||
|
|
||||||
/* Leading "./" ensures getpath.c can still find the standard library */
|
/* Leading "./" ensures getpath.c can still find the standard library */
|
||||||
_Py_EMBED_PREINIT_CHECK("Checking Py_DecodeLocale\n");
|
_Py_EMBED_PREINIT_CHECK("Checking Py_DecodeLocale\n");
|
||||||
wchar_t *program = Py_DecodeLocale("./spam", NULL);
|
wchar_t *program = Py_DecodeLocale("./spam", NULL);
|
||||||
|
@ -235,6 +238,9 @@ static void bpo20891_thread(void *lockp)
|
||||||
|
|
||||||
static int test_bpo20891(void)
|
static int test_bpo20891(void)
|
||||||
{
|
{
|
||||||
|
/* the test doesn't support custom memory allocators */
|
||||||
|
putenv("PYTHONMALLOC=");
|
||||||
|
|
||||||
/* bpo-20891: Calling PyGILState_Ensure in a non-Python thread before
|
/* bpo-20891: Calling PyGILState_Ensure in a non-Python thread before
|
||||||
calling PyEval_InitThreads() must not crash. PyGILState_Ensure() must
|
calling PyEval_InitThreads() must not crash. PyGILState_Ensure() must
|
||||||
call PyEval_InitThreads() for us in this case. */
|
call PyEval_InitThreads() for us in this case. */
|
||||||
|
|
|
@ -453,7 +453,8 @@ preconfig_read(_PyPreConfig *config, const _PyPreCmdline *cmdline)
|
||||||
|
|
||||||
/* allocator */
|
/* allocator */
|
||||||
if (config->dev_mode && config->allocator == NULL) {
|
if (config->dev_mode && config->allocator == NULL) {
|
||||||
config->allocator = _PyMem_RawStrdup("debug");
|
const char *allocator = _PyMem_GetDebugAllocatorsName();
|
||||||
|
config->allocator = _PyMem_RawStrdup(allocator);
|
||||||
if (config->allocator == NULL) {
|
if (config->allocator == NULL) {
|
||||||
return _Py_INIT_NO_MEMORY();
|
return _Py_INIT_NO_MEMORY();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue