bpo-32030: Add _PyMainInterpreterConfig.pythonhome (#4513)

* Py_Main() now reads the PYTHONHOME environment variable
* Add _Py_GetPythonHomeWithConfig() private function
* Add _PyWarnings_InitWithConfig()
* init_filters() doesn't get the current core configuration from the
  current interpreter or Python thread anymore. Pass explicitly the
  configuration to _PyWarnings_InitWithConfig().
* _Py_InitializeCore() now fails on _PyWarnings_InitWithConfig()
  failure.
* Pass configuration as constant
This commit is contained in:
Victor Stinner 2017-11-23 10:43:14 +01:00 committed by GitHub
parent e32e79f7d8
commit 1f15111a6e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 136 additions and 43 deletions

View file

@ -1185,10 +1185,9 @@ create_filter(PyObject *category, const char *action)
}
static PyObject *
init_filters(void)
init_filters(const _PyCoreConfig *config)
{
PyInterpreterState *interp = PyThreadState_GET()->interp;
int dev_mode = interp->core_config.dev_mode;
int dev_mode = config->dev_mode;
Py_ssize_t count = 2;
if (dev_mode) {
@ -1264,8 +1263,8 @@ static struct PyModuleDef warningsmodule = {
};
PyMODINIT_FUNC
_PyWarnings_Init(void)
PyObject*
_PyWarnings_InitWithConfig(const _PyCoreConfig *config)
{
PyObject *m;
@ -1274,7 +1273,7 @@ _PyWarnings_Init(void)
return NULL;
if (_PyRuntime.warnings.filters == NULL) {
_PyRuntime.warnings.filters = init_filters();
_PyRuntime.warnings.filters = init_filters(config);
if (_PyRuntime.warnings.filters == NULL)
return NULL;
}
@ -1305,3 +1304,12 @@ _PyWarnings_Init(void)
_PyRuntime.warnings.filters_version = 0;
return m;
}
PyMODINIT_FUNC
_PyWarnings_Init(void)
{
PyInterpreterState *interp = PyThreadState_GET()->interp;
const _PyCoreConfig *config = &interp->core_config;
return _PyWarnings_InitWithConfig(config);
}