From a5194115733f6ca8fc1ddbee43eabbde536900e6 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 22 Nov 2018 16:11:15 +0100 Subject: [PATCH] Revert "bpo-35239: _PySys_EndInit() copies module_search_path (GH-10532)" (GH-10660) This reverts commit d2be9a5c13221fb84c2221bbfd93efac6111e697. --- Lib/test/test_embed.py | 11 ++++++++--- Python/pylifecycle.c | 4 ++-- Python/sysmodule.c | 26 +++----------------------- 3 files changed, 13 insertions(+), 28 deletions(-) diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py index 89797d25c84..11f37f06da9 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -301,6 +301,10 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): } # main config + UNTESTED_MAIN_CONFIG = ( + # FIXME: untested main configuration variables + 'module_search_path', + ) COPY_MAIN_CONFIG = ( # Copy core config to main config for expected values 'argv', @@ -311,8 +315,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): 'install_signal_handlers', 'prefix', 'warnoptions', - # xoptions is created from core_config in check_main_config(). - # 'module_search_paths' is copied to 'module_search_path'. + # xoptions is created from core_config in check_main_config() ) # global config @@ -386,10 +389,12 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): main_config = config['main_config'] # main config + for key in self.UNTESTED_MAIN_CONFIG: + del main_config[key] + expected_main = {} for key in self.COPY_MAIN_CONFIG: expected_main[key] = core_config[key] - expected_main['module_search_path'] = core_config['module_search_paths'] expected_main['xoptions'] = self.main_xoptions(core_config['xoptions']) self.assertEqual(main_config, expected_main) diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 7eaf376d1a6..86f95de8336 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -967,8 +967,8 @@ _Py_InitializeMainInterpreter(PyInterpreterState *interp, } /* Initialize warnings. */ - PyObject *warnoptions = PySys_GetObject("warnoptions"); - if (warnoptions != NULL && PyList_Size(warnoptions) > 0) + if (interp->config.warnoptions != NULL && + PyList_Size(interp->config.warnoptions) > 0) { PyObject *warnings_module = PyImport_ImportModule("warnings"); if (warnings_module == NULL) { diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 48d8fa4c6e0..498fa91fcc3 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -2464,20 +2464,7 @@ _PySys_EndInit(PyObject *sysdict, _PyMainInterpreterConfig *config) assert(config->exec_prefix != NULL); assert(config->base_exec_prefix != NULL); -#define COPY_LIST(KEY, ATTR) \ - do { \ - assert(PyList_Check(config->ATTR)); \ - PyObject *list = PyList_GetSlice(config->ATTR, \ - 0, PyList_GET_SIZE(config->ATTR)); \ - if (list == NULL) { \ - return -1; \ - } \ - SET_SYS_FROM_STRING_BORROW(KEY, list); \ - Py_DECREF(list); \ - } while (0) - - COPY_LIST("path", module_search_path); - + SET_SYS_FROM_STRING_BORROW("path", config->module_search_path); SET_SYS_FROM_STRING_BORROW("executable", config->executable); SET_SYS_FROM_STRING_BORROW("prefix", config->prefix); SET_SYS_FROM_STRING_BORROW("base_prefix", config->base_prefix); @@ -2488,19 +2475,12 @@ _PySys_EndInit(PyObject *sysdict, _PyMainInterpreterConfig *config) SET_SYS_FROM_STRING_BORROW("argv", config->argv); } if (config->warnoptions != NULL) { - COPY_LIST("warnoptions", warnoptions); + SET_SYS_FROM_STRING_BORROW("warnoptions", config->warnoptions); } if (config->xoptions != NULL) { - PyObject *dict = PyDict_Copy(config->xoptions); - if (dict == NULL) { - return -1; - } - SET_SYS_FROM_STRING_BORROW("_xoptions", dict); - Py_DECREF(dict); + SET_SYS_FROM_STRING_BORROW("_xoptions", config->xoptions); } -#undef COPY_LIST - /* Set flags to their final values */ SET_SYS_FROM_STRING_INT_RESULT("flags", make_flags()); /* prevent user from creating new instances */