]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-44032: Delay deletion of stack chunks until thread state is deleted. (GH-26285)
authorMark Shannon <mark@hotpy.org>
Mon, 24 May 2021 15:22:02 +0000 (16:22 +0100)
committerGitHub <noreply@github.com>
Mon, 24 May 2021 15:22:02 +0000 (16:22 +0100)
Python/pystate.c

index 36057ee13bded9b644329959493cb87dc0a5089c..64dcd577a0ffdbacec8ca9dd1690105dd5475a26 100644 (file)
@@ -897,13 +897,6 @@ PyThreadState_Clear(PyThreadState *tstate)
     if (tstate->on_delete != NULL) {
         tstate->on_delete(tstate->on_delete_data);
     }
-    _PyStackChunk *chunk = tstate->datastack_chunk;
-    tstate->datastack_chunk = NULL;
-    while (chunk != NULL) {
-        _PyStackChunk *prev = chunk->previous;
-        _PyObject_VirtualFree(chunk, chunk->size);
-        chunk = prev;
-    }
 }
 
 
@@ -936,6 +929,13 @@ tstate_delete_common(PyThreadState *tstate,
     {
         PyThread_tss_set(&gilstate->autoTSSkey, NULL);
     }
+    _PyStackChunk *chunk = tstate->datastack_chunk;
+    tstate->datastack_chunk = NULL;
+    while (chunk != NULL) {
+        _PyStackChunk *prev = chunk->previous;
+        _PyObject_VirtualFree(chunk, chunk->size);
+        chunk = prev;
+    }
 }
 
 static void