summaryrefslogtreecommitdiff
path: root/Python/pylifecycle.c
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2019-03-25 17:54:58 +0100
committerGitHub <noreply@github.com>2019-03-25 17:54:58 +0100
commitf72346c47537657a287a862305f65eb5d7594fbf (patch)
treed97a19e2a156c04623bcefd32a16b851798a53af /Python/pylifecycle.c
parent68d228f174ceed151200e7e0b44ffc5edd4e0ea2 (diff)
downloadcpython-git-f72346c47537657a287a862305f65eb5d7594fbf.tar.gz
bpo-36301: Cleanup preconfig code (GH-12535)
Prepare code to move some _PyPreConfig parameters into _PyPreCmdline. Changes: * _PyCoreConfig_ReadFromArgv(): remove preconfig parameter, use _PyRuntime.preconfig. * Add _PyPreCmdline_GetPreConfig() (called by _PyPreConfig_Read()). * Rename _PyPreCmdline_Init() to _PyPreCmdline_SetArgv() * Factorize _Py_PreInitializeFromPreConfig() code: add pyinit_preinit(). * _PyPreConfig_Read() now sets coerce_c_locale to 2 if it must be coerced. * Remove _PyCoreConfig_ReadPreConfig(). * _PyCoreConfig_Write() now copies updated preconfig into _PyRuntime.
Diffstat (limited to 'Python/pylifecycle.c')
-rw-r--r--Python/pylifecycle.c61
1 files changed, 30 insertions, 31 deletions
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 994a94f140..ea1b731a56 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -714,23 +714,8 @@ _Py_InitializeCore_impl(PyInterpreterState **interp_p,
}
-_PyInitError
-_Py_PreInitializeFromPreConfig(_PyPreConfig *config)
-{
- if (config != NULL) {
- _PyInitError err = _PyPreConfig_Write(config);
- if (_Py_INIT_FAILED(err)) {
- return err;
- }
- }
-
- _PyRuntime.pre_initialized = 1;
- return _Py_INIT_OK();
-}
-
-
static _PyInitError
-pyinit_preconfig(_PyPreConfig *config, const _PyPreConfig *src_config)
+pyinit_preinit(_PyPreConfig *config, const _PyPreConfig *src_config)
{
_PyInitError err;
@@ -739,32 +724,46 @@ pyinit_preconfig(_PyPreConfig *config, const _PyPreConfig *src_config)
return err;
}
- if (_PyPreConfig_Copy(config, src_config) < 0) {
- return _Py_INIT_ERR("failed to copy pre config");
+ if (_PyRuntime.pre_initialized) {
+ /* If it's already configured: ignored the new configuration */
+ return _Py_INIT_OK();
+ }
+
+ if (src_config) {
+ if (_PyPreConfig_Copy(config, src_config) < 0) {
+ return _Py_INIT_ERR("failed to copy pre config");
+ }
+ }
+
+ err = _PyPreConfig_Read(config, NULL);
+ if (_Py_INIT_FAILED(err)) {
+ return err;
}
- err = _PyPreConfig_Read(config);
+ err = _PyPreConfig_Write(config);
if (_Py_INIT_FAILED(err)) {
return err;
}
- return _Py_PreInitializeFromPreConfig(config);
+ _PyRuntime.pre_initialized = 1;
+ return _Py_INIT_OK();
}
_PyInitError
-_Py_PreInitialize(void)
+_Py_PreInitializeFromPreConfig(_PyPreConfig *config)
{
- _PyInitError err = _PyRuntime_Initialize();
- if (_Py_INIT_FAILED(err)) {
- return err;
- }
+ return pyinit_preinit(config, NULL);
+}
- if (_PyRuntime.pre_initialized) {
- return _Py_INIT_OK();
- }
- return _Py_PreInitializeFromPreConfig(NULL);
+_PyInitError
+_Py_PreInitialize(void)
+{
+ _PyPreConfig config = _PyPreConfig_INIT;
+ _PyInitError err = pyinit_preinit(&config, NULL);
+ _PyPreConfig_Clear(&config);
+ return err;
}
@@ -776,7 +775,7 @@ pyinit_coreconfig(_PyCoreConfig *config, const _PyCoreConfig *src_config,
return _Py_INIT_ERR("failed to copy core config");
}
- _PyInitError err = _PyCoreConfig_Read(config, NULL);
+ _PyInitError err = _PyCoreConfig_Read(config);
if (_Py_INIT_FAILED(err)) {
return err;
}
@@ -817,7 +816,7 @@ _Py_InitializeCore(PyInterpreterState **interp_p,
_PyCoreConfig local_config = _PyCoreConfig_INIT;
- err = pyinit_preconfig(&local_config.preconfig, &src_config->preconfig);
+ err = pyinit_preinit(&local_config.preconfig, &src_config->preconfig);
if (_Py_INIT_FAILED(err)) {
goto done;
}