[Python-checkins] bpo-40887: Fix finalize_interp_clear() for free lists (GH-20698)

Victor Stinner webhook-mailer at python.org
Sun Jun 7 19:22:40 EDT 2020


https://github.com/python/cpython/commit/7907f8cbc6923240edb0b5b63adafb871c4c8875
commit: 7907f8cbc6923240edb0b5b63adafb871c4c8875
branch: master
author: Victor Stinner <vstinner at python.org>
committer: GitHub <noreply at github.com>
date: 2020-06-08T01:22:36+02:00
summary:

bpo-40887: Fix finalize_interp_clear() for free lists (GH-20698)

Reorganize code to ensure that free lists are cleared in the right
order. Call _PyWarnings_Fini() before _PyList_Fini().

files:
M Python/pylifecycle.c

diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 6d2eb1defc884..d730a98d3e5b9 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -1250,37 +1250,26 @@ static void
 finalize_interp_types(PyThreadState *tstate, int is_main_interp)
 {
     _PyFrame_Fini(tstate);
-    _PyTuple_Fini(tstate);
-    _PyList_Fini(tstate);
+    _PyAsyncGen_Fini(tstate);
+    _PyContext_Fini(tstate);
+
     if (is_main_interp) {
         _PySet_Fini();
-        _PyBytes_Fini();
     }
-
-    _PyLong_Fini(tstate);
-    _PyFloat_Fini(tstate);
-
     if (is_main_interp) {
         _PyDict_Fini();
     }
+    _PyList_Fini(tstate);
+    _PyTuple_Fini(tstate);
 
     _PySlice_Fini(tstate);
-    _PyWarnings_Fini(tstate->interp);
 
     if (is_main_interp) {
-        _Py_HashRandomization_Fini();
-        _PyArg_Fini();
+        _PyBytes_Fini();
     }
-
-    _PyAsyncGen_Fini(tstate);
-    _PyContext_Fini(tstate);
-
-    /* Cleanup Unicode implementation */
     _PyUnicode_Fini(tstate);
-
-    if (is_main_interp) {
-        _Py_ClearFileSystemEncoding();
-    }
+    _PyFloat_Fini(tstate);
+    _PyLong_Fini(tstate);
 }
 
 
@@ -1299,19 +1288,20 @@ finalize_interp_clear(PyThreadState *tstate)
 
     _PyGC_Fini(tstate);
 
-    finalize_interp_types(tstate, is_main_interp);
-
     if (is_main_interp) {
-        /* XXX Still allocated:
-           - various static ad-hoc pointers to interned strings
-           - int and float free list blocks
-           - whatever various modules and libraries allocate
-        */
+        _Py_HashRandomization_Fini();
+        _PyArg_Fini();
+        _Py_ClearFileSystemEncoding();
+    }
 
-        PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
+    _PyWarnings_Fini(tstate->interp);
 
+    if (is_main_interp) {
+        PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
         _PyExc_Fini();
     }
+
+    finalize_interp_types(tstate, is_main_interp);
 }
 
 



More information about the Python-checkins mailing list