From a7368ac6360246b1ef7f8f152963c2362d272183 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 15 Nov 2017 18:11:45 -0800 Subject: bpo-32030: Enhance Py_Main() (#4412) Parse more env vars in Py_Main(): * Add more options to _PyCoreConfig: * faulthandler * tracemalloc * importtime * Move code to parse environment variables from _Py_InitializeCore() to Py_Main(). This change fixes a regression from Python 3.6: PYTHONUNBUFFERED is now read before calling pymain_init_stdio(). * _PyFaulthandler_Init() and _PyTraceMalloc_Init() now take an argument to decide if the module has to be enabled at startup. * tracemalloc_start() is now responsible to check the maximum number of frames. Other changes: * Cleanup Py_Main(): * Rename some pymain_xxx() subfunctions * Add pymain_run_python() subfunction * Cleanup Py_NewInterpreter() * _PyInterpreterState_Enable() now reports failure * init_hash_secret() now considers pyurandom() failure as an "user error": don't fail with abort(). * pymain_optlist_append() and pymain_strdup() now sets err on memory allocation failure. --- Python/pystate.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'Python/pystate.c') diff --git a/Python/pystate.c b/Python/pystate.c index 30f214e93d..4544de9986 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -76,7 +76,7 @@ _PyRuntimeState_Fini(_PyRuntimeState *runtime) static void _PyGILState_NoteThreadState(PyThreadState* tstate); -void +_PyInitError _PyInterpreterState_Enable(_PyRuntimeState *runtime) { runtime->interpreters.next_id = 0; @@ -85,9 +85,11 @@ _PyInterpreterState_Enable(_PyRuntimeState *runtime) initialized here. */ if (runtime->interpreters.mutex == NULL) { runtime->interpreters.mutex = PyThread_allocate_lock(); - if (runtime->interpreters.mutex == NULL) - Py_FatalError("Can't initialize threads for interpreter"); + if (runtime->interpreters.mutex == NULL) { + return _Py_INIT_ERR("Can't initialize threads for interpreter"); + } } + return _Py_INIT_OK(); } PyInterpreterState * -- cgit v1.2.1