bpo-36142: PYTHONMALLOC overrides PYTHONDEV (GH-12191)

bpo-34247, bpo-36142: The PYTHONMALLOC environment variable has the
priority over PYTHONDEV env var and "-X dev" command line option.
For example, PYTHONMALLOC=malloc PYTHONDEVMODE=1 sets the memory
allocators to "malloc" (and not to "debug").

Add an unit test.
This commit is contained in:
Victor Stinner 2019-03-06 12:51:53 +01:00 • committed by GitHub
parent 01e0f439f5
commit 25d13f37aa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 21 deletions

View file

@ -442,8 +442,8 @@ static int test_init_from_config(void)
config.use_hash_seed = 1;
config.hash_seed = 123;
putenv("PYTHONMALLOC=malloc");
config.preconfig.allocator = "malloc_debug";
putenv("PYTHONMALLOC=malloc_debug");
config.preconfig.allocator = "malloc";
/* dev_mode=1 is tested in test_init_dev_mode() */
@ -570,7 +570,7 @@ static int test_init_from_config(void)
static void test_init_env_putenvs(void)
{
putenv("PYTHONHASHSEED=42");
putenv("PYTHONMALLOC=malloc_debug");
putenv("PYTHONMALLOC=malloc");
putenv("PYTHONTRACEMALLOC=2");
putenv("PYTHONPROFILEIMPORTTIME=1");
putenv("PYTHONMALLOCSTATS=1");
@ -594,15 +594,6 @@ static void test_init_env_putenvs(void)
}
static void test_init_env_dev_mode_putenvs(void)
{
test_init_env_putenvs();
putenv("PYTHONMALLOC=malloc");
putenv("PYTHONFAULTHANDLER=");
putenv("PYTHONDEVMODE=1");
}
static int test_init_env(void)
{
/* Test initialization from environment variables */
@ -615,6 +606,15 @@ static int test_init_env(void)
}
static void test_init_env_dev_mode_putenvs(void)
{
test_init_env_putenvs();
putenv("PYTHONMALLOC=");
putenv("PYTHONFAULTHANDLER=");
putenv("PYTHONDEVMODE=1");
}
static int test_init_env_dev_mode(void)
{
/* Test initialization from environment variables */
@ -627,6 +627,19 @@ static int test_init_env_dev_mode(void)
}
static int test_init_env_dev_mode_alloc(void)
{
/* Test initialization from environment variables */
Py_IgnoreEnvironmentFlag = 0;
test_init_env_dev_mode_putenvs();
putenv("PYTHONMALLOC=malloc");
_testembed_Py_Initialize();
dump_config();
Py_Finalize();
return 0;
}
static int test_init_isolated(void)
{
/* Test _PyCoreConfig.isolated=1 */
@ -700,6 +713,7 @@ static struct TestCase TestCases[] = {
{ "init_from_config", test_init_from_config },
{ "init_env", test_init_env },
{ "init_env_dev_mode", test_init_env_dev_mode },
{ "init_env_dev_mode_alloc", test_init_env_dev_mode_alloc },
{ "init_dev_mode", test_init_dev_mode },
{ "init_isolated", test_init_isolated },
{ NULL, NULL }