bpo-34170: _PyCoreConfig_Read() leaves Py_IsolatedFlag unchanged (GH-8361)

* _PyCoreConfig_Read() no longer directly modifies Py_IsolatedFlag
  and Py_NoSiteFlag global configuration flags. The function now
  requires two pointers to integer, so these flags can be set later,
  to avoid side effets in _PyCoreConfig_Read().
* pathconfig_global_init() now leaves Py_IsolatedFlag and
  Py_NoSiteFlag unchanged.
* Fix pathconfig_global_init(): avoid computing the path
  configuration twice, use _PyCoreConfig_SetPathConfig().
This commit is contained in:
Victor Stinner 2018-07-21 03:54:20 +02:00 committed by GitHub
parent c884616390
commit f2626ce6d4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 44 additions and 41 deletions

View file

@ -283,7 +283,8 @@ core_config_init_module_search_paths(_PyCoreConfig *config,
_PyInitError
_PyCoreConfig_InitPathConfig(_PyCoreConfig *config)
_PyCoreConfig_InitPathConfig(_PyCoreConfig *config,
int *isolated, int *no_site_import)
{
_PyPathConfig path_config = _PyPathConfig_INIT;
_PyInitError err;
@ -344,6 +345,13 @@ _PyCoreConfig_InitPathConfig(_PyCoreConfig *config)
}
}
if (path_config.isolated != -1 && isolated != NULL) {
*isolated = path_config.isolated;
}
if (path_config.no_site_import != -1 && no_site_import != NULL) {
*no_site_import = path_config.no_site_import;
}
_PyPathConfig_Clear(&path_config);
return _Py_INIT_OK();
@ -365,30 +373,25 @@ pathconfig_global_init(void)
}
_PyInitError err;
_PyPathConfig path_config = _PyPathConfig_INIT;
_PyCoreConfig config = _PyCoreConfig_INIT;
err = _PyCoreConfig_Read(&config);
/* Py_IsolatedFlag and Py_NoSiteFlag are left unchanged: pass NULL.
_PyCoreConfig_InitPathConfig() will be called later and will set
these flags. */
err = _PyCoreConfig_Read(&config, NULL, NULL);
if (_Py_INIT_FAILED(err)) {
goto error;
}
err = _PyPathConfig_Calculate(&path_config, &config);
err = _PyCoreConfig_SetPathConfig(&config);
if (_Py_INIT_FAILED(err)) {
goto error;
}
err = _PyPathConfig_SetGlobal(&path_config);
if (_Py_INIT_FAILED(err)) {
goto error;
}
_PyPathConfig_Clear(&path_config);
_PyCoreConfig_Clear(&config);
return;
error:
_PyPathConfig_Clear(&path_config);
_PyCoreConfig_Clear(&config);
_Py_FatalInitError(err);
}

View file

@ -928,7 +928,7 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib)
config._disable_importlib = !install_importlib;
config.install_signal_handlers = install_sigs;
err = _PyCoreConfig_Read(&config);
err = _PyCoreConfig_Read(&config, &Py_IsolatedFlag, &Py_NoSiteFlag);
if (_Py_INIT_FAILED(err)) {
goto done;
}