summaryrefslogtreecommitdiff
path: root/Python/pylifecycle.c
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2019-03-26 02:31:11 +0100
committerGitHub <noreply@github.com>2019-03-26 02:31:11 +0100
commit20004959d23d07ac784eef51ecb161012180faa8 (patch)
tree7fcc04b0924c2180d234196d3886e58cb57e2609 /Python/pylifecycle.c
parentf78a5e9ce8f32a195f5f788aade79578437f30a6 (diff)
downloadcpython-git-20004959d23d07ac784eef51ecb161012180faa8.tar.gz
bpo-36301: Remove _PyCoreConfig.preconfig (GH-12546)
* Replace _PyCoreConfig.preconfig with 3 new fields in _PyCoreConfig: isolated, use_environment, dev_mode. * Add _PyPreCmdline.dev_mode. * Add _Py_PreInitializeFromPreConfigInPlace().
Diffstat (limited to 'Python/pylifecycle.c')
-rw-r--r--Python/pylifecycle.c54
1 files changed, 32 insertions, 22 deletions
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index e08f290d8d..b12fa820e9 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -286,9 +286,10 @@ static const char *_C_LOCALE_WARNING =
"locales is recommended.\n";
static void
-_emit_stderr_warning_for_legacy_locale(const _PyCoreConfig *core_config)
+_emit_stderr_warning_for_legacy_locale(void)
{
- if (core_config->preconfig.coerce_c_locale_warn && _Py_LegacyLocaleDetected()) {
+ const _PyPreConfig *preconfig = &_PyRuntime.preconfig;
+ if (preconfig->coerce_c_locale_warn && _Py_LegacyLocaleDetected()) {
PySys_FormatStderr("%s", _C_LOCALE_WARNING);
}
}
@@ -675,6 +676,8 @@ _Py_InitializeCore_impl(PyInterpreterState **interp_p,
{
PyInterpreterState *interp;
+ _PyCoreConfig_Write(core_config);
+
_PyInitError err = pycore_init_runtime(core_config);
if (_Py_INIT_FAILED(err)) {
return err;
@@ -720,54 +723,64 @@ pyinit_preinit(_PyPreConfig *config,
const _PyCoreConfig *coreconfig)
{
_PyInitError err;
+ _PyPreConfig local_config = _PyPreConfig_INIT;
+ if (!config) {
+ config = &local_config;
+ }
err = _PyRuntime_Initialize();
if (_Py_INIT_FAILED(err)) {
- return err;
+ goto done;
}
if (_PyRuntime.pre_initialized) {
/* If it's already configured: ignored the new configuration */
- return _Py_INIT_OK();
- }
-
- if (!src_config && coreconfig) {
- src_config = &coreconfig->preconfig;
+ err = _Py_INIT_OK();
+ goto done;
}
if (src_config) {
if (_PyPreConfig_Copy(config, src_config) < 0) {
- return _Py_INIT_ERR("failed to copy pre config");
+ err = _Py_INIT_ERR("failed to copy pre config");
+ goto done;
}
}
err = _PyPreConfig_Read(config, NULL, coreconfig);
if (_Py_INIT_FAILED(err)) {
- return err;
+ goto done;
}
err = _PyPreConfig_Write(config);
if (_Py_INIT_FAILED(err)) {
- return err;
+ goto done;
}
_PyRuntime.pre_initialized = 1;
- return _Py_INIT_OK();
+ err = _Py_INIT_OK();
+
+done:
+ _PyPreConfig_Clear(&local_config);
+ return err;
}
_PyInitError
_Py_PreInitialize(void)
{
- _PyPreConfig config = _PyPreConfig_INIT;
- _PyInitError err = pyinit_preinit(&config, NULL, NULL);
- _PyPreConfig_Clear(&config);
- return err;
+ return pyinit_preinit(NULL, NULL, NULL);
}
_PyInitError
-_Py_PreInitializeFromPreConfig(_PyPreConfig *config)
+_Py_PreInitializeFromPreConfig(const _PyPreConfig *src_config)
+{
+ return pyinit_preinit(NULL, src_config, NULL);
+}
+
+
+_PyInitError
+_Py_PreInitializeInPlace(_PyPreConfig *config)
{
return pyinit_preinit(config, NULL, NULL);
}
@@ -776,10 +789,7 @@ _Py_PreInitializeFromPreConfig(_PyPreConfig *config)
_PyInitError
_Py_PreInitializeFromConfig(const _PyCoreConfig *coreconfig)
{
- _PyPreConfig config = _PyPreConfig_INIT;
- _PyInitError err = pyinit_preinit(&config, NULL, coreconfig);
- _PyPreConfig_Clear(&config);
- return err;
+ return pyinit_preinit(NULL, NULL, coreconfig);
}
@@ -964,7 +974,7 @@ _Py_InitializeMainInterpreter(PyInterpreterState *interp,
}
#ifndef MS_WINDOWS
- _emit_stderr_warning_for_legacy_locale(core_config);
+ _emit_stderr_warning_for_legacy_locale();
#endif
return _Py_INIT_OK();