Skip to content

Commit 7907f8c

Browse files
authored
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().
1 parent 2efe18b commit 7907f8c

File tree

1 file changed

+17
-27
lines changed

1 file changed

+17
-27
lines changed

Python/pylifecycle.c

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,37 +1250,26 @@ static void
12501250
finalize_interp_types(PyThreadState *tstate, int is_main_interp)
12511251
{
12521252
_PyFrame_Fini(tstate);
1253-
_PyTuple_Fini(tstate);
1254-
_PyList_Fini(tstate);
1253+
_PyAsyncGen_Fini(tstate);
1254+
_PyContext_Fini(tstate);
1255+
12551256
if (is_main_interp) {
12561257
_PySet_Fini();
1257-
_PyBytes_Fini();
12581258
}
1259-
1260-
_PyLong_Fini(tstate);
1261-
_PyFloat_Fini(tstate);
1262-
12631259
if (is_main_interp) {
12641260
_PyDict_Fini();
12651261
}
1262+
_PyList_Fini(tstate);
1263+
_PyTuple_Fini(tstate);
12661264

12671265
_PySlice_Fini(tstate);
1268-
_PyWarnings_Fini(tstate->interp);
12691266

12701267
if (is_main_interp) {
1271-
_Py_HashRandomization_Fini();
1272-
_PyArg_Fini();
1268+
_PyBytes_Fini();
12731269
}
1274-
1275-
_PyAsyncGen_Fini(tstate);
1276-
_PyContext_Fini(tstate);
1277-
1278-
/* Cleanup Unicode implementation */
12791270
_PyUnicode_Fini(tstate);
1280-
1281-
if (is_main_interp) {
1282-
_Py_ClearFileSystemEncoding();
1283-
}
1271+
_PyFloat_Fini(tstate);
1272+
_PyLong_Fini(tstate);
12841273
}
12851274

12861275

@@ -1299,19 +1288,20 @@ finalize_interp_clear(PyThreadState *tstate)
12991288

13001289
_PyGC_Fini(tstate);
13011290

1302-
finalize_interp_types(tstate, is_main_interp);
1303-
13041291
if (is_main_interp) {
1305-
/* XXX Still allocated:
1306-
- various static ad-hoc pointers to interned strings
1307-
- int and float free list blocks
1308-
- whatever various modules and libraries allocate
1309-
*/
1292+
_Py_HashRandomization_Fini();
1293+
_PyArg_Fini();
1294+
_Py_ClearFileSystemEncoding();
1295+
}
13101296

1311-
PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1297+
_PyWarnings_Fini(tstate->interp);
13121298

1299+
if (is_main_interp) {
1300+
PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
13131301
_PyExc_Fini();
13141302
}
1303+
1304+
finalize_interp_types(tstate, is_main_interp);
13151305
}
13161306

13171307

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy