From: Victor Stinner Date: Tue, 19 Mar 2019 23:03:01 +0000 (+0100) Subject: bpo-35388: Fix _PyRuntime_Finalize() (GH-12443) X-Git-Tag: v3.8.0a3~50 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fd23cfa464ab93273370475900819c1ea37c852f;p=thirdparty%2FPython%2Fcpython.git bpo-35388: Fix _PyRuntime_Finalize() (GH-12443) Calling _PyRuntime_Initialize() after _PyRuntime_Finalize() now re-initializes _PyRuntime structure. Previously, _PyRuntime_Initialize() did nothing in that case. --- diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 49a2f18e49fa..df9570b2e487 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -69,6 +69,7 @@ static void call_ll_exitfuncs(void); int _Py_UnhandledKeyboardInterrupt = 0; _PyRuntimeState _PyRuntime = _PyRuntimeState_INIT; +static int runtime_initialized = 0; _PyInitError _PyRuntime_Initialize(void) @@ -79,11 +80,10 @@ _PyRuntime_Initialize(void) every Py_Initialize() call, but doing so breaks the runtime. This is because the runtime state is not properly finalized currently. */ - static int initialized = 0; - if (initialized) { + if (runtime_initialized) { return _Py_INIT_OK(); } - initialized = 1; + runtime_initialized = 1; return _PyRuntimeState_Init(&_PyRuntime); } @@ -92,6 +92,7 @@ void _PyRuntime_Finalize(void) { _PyRuntimeState_Fini(&_PyRuntime); + runtime_initialized = 0; } int