summaryrefslogtreecommitdiffstats
path: root/Modules/main.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2018-01-25 08:18:36 (GMT)
committerGitHub <noreply@github.com>2018-01-25 08:18:36 (GMT)
commit2b822a0bb1de2612c85d8f75e3ce89eda2ac9f68 (patch)
tree0a1e50226a88d81f177e075ce91eb0499807c57a /Modules/main.c
parentcab0b2b053970982b760048acc3046363615a8dd (diff)
downloadcpython-2b822a0bb1de2612c85d8f75e3ce89eda2ac9f68.zip
cpython-2b822a0bb1de2612c85d8f75e3ce89eda2ac9f68.tar.gz
cpython-2b822a0bb1de2612c85d8f75e3ce89eda2ac9f68.tar.bz2
bpo-32652: Defer pymain_set_global_config() call (#5303)
In Py_Main(), don't call pymain_set_global_config() early: only call it when the whole configuration has been read. Add an unit test to prevent future regression.
Diffstat (limited to 'Modules/main.c')
-rw-r--r--Modules/main.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/Modules/main.c b/Modules/main.c
index 2e632e2..1ce075f 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -1909,22 +1909,24 @@ pymain_read_conf_impl(_PyMain *pymain, _Py_CommandLineDetails *cmdline)
return -1;
}
- /* Global configuration variables should be set to read the core
- configuration, and then get again to get updated values.
-
- _PyPathConfig_Init() tests !Py_FrozenFlag to avoid some warnings.
- Moreover, on Windows, it modifies Py_IsolatedFlag and Py_NoSiteFlag
- variables if a "._pth" file is found. */
- pymain_set_global_config(pymain, cmdline);
+ /* On Windows, _PyPathConfig_Init() modifies Py_IsolatedFlag and
+ Py_NoSiteFlag variables if a "._pth" file is found. */
+ int init_isolated = Py_IsolatedFlag;
+ int init_no_site = Py_NoSiteFlag;
+ Py_IsolatedFlag = cmdline->isolated;
+ Py_NoSiteFlag = cmdline->no_site_import;
err = _PyCoreConfig_Read(config);
+
+ cmdline->isolated = Py_IsolatedFlag;
+ cmdline->no_site_import = Py_NoSiteFlag;
+ Py_IsolatedFlag = init_isolated;
+ Py_NoSiteFlag = init_no_site;
+
if (_Py_INIT_FAILED(err)) {
pymain->err = err;
return -1;
}
-
- Py_UTF8Mode = pymain->config.utf8_mode;
- pymain_get_global_config(pymain, cmdline);
return 0;
}
@@ -1948,8 +1950,6 @@ pymain_read_conf(_PyMain *pymain, _Py_CommandLineDetails *cmdline)
int locale_coerced = 0;
int loops = 0;
int init_ignore_env = pymain->config.ignore_environment;
- int init_isolated = cmdline->isolated;
- int init_no_site = cmdline->no_site_import;
while (1) {
int utf8_mode = pymain->config.utf8_mode;
@@ -2011,8 +2011,6 @@ pymain_read_conf(_PyMain *pymain, _Py_CommandLineDetails *cmdline)
modified by _PyCoreConfig_Read(). */
Py_UTF8Mode = pymain->config.utf8_mode;
Py_IgnoreEnvironmentFlag = init_ignore_env;
- Py_IsolatedFlag = init_isolated;
- Py_NoSiteFlag = init_no_site;
_PyCoreConfig_Clear(&pymain->config);
pymain_clear_cmdline(pymain, cmdline);
pymain_get_global_config(pymain, cmdline);