[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