]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-35388: Fix _PyRuntime_Finalize() (GH-12443)
authorVictor Stinner <vstinner@redhat.com>
Tue, 19 Mar 2019 23:03:01 +0000 (00:03 +0100)
committerGitHub <noreply@github.com>
Tue, 19 Mar 2019 23:03:01 +0000 (00:03 +0100)
Calling _PyRuntime_Initialize() after _PyRuntime_Finalize() now re-initializes
_PyRuntime structure. Previously, _PyRuntime_Initialize() did
nothing in that case.

Python/pylifecycle.c

index 49a2f18e49fa1dc2d81cbf6ab4f43125d35d528b..df9570b2e4877581f3265b166a7c26e938a92e21 100644 (file)
@@ -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