mirror of
https://github.com/python/cpython.git
synced 2025-09-01 14:38:00 +00:00
bpo-41796: Call _PyAST_Fini() earlier to fix a leak (GH-23131)
Call _PyAST_Fini() on all interpreters, not only on the main interpreter. Also, call it ealier to fix a reference leak. Python types contain a reference to themselves in in their PyTypeObject.tp_mro member. _PyAST_Fini() must called before the last GC collection to destroy AST types. _PyInterpreterState_Clear() now calls _PyAST_Fini(). It now also calls _PyWarnings_Fini() on subinterpeters, not only on the main interpreter. Add an assertion in AST init_types() to ensure that the _ast module is no longer used after _PyAST_Fini() has been called.
This commit is contained in:
parent
212d32f45c
commit
fd957c124c
5 changed files with 78 additions and 43 deletions
|
@ -1545,12 +1545,6 @@ flush_std_files(void)
|
|||
static void
|
||||
finalize_interp_types(PyThreadState *tstate)
|
||||
{
|
||||
// The _ast module state is shared by all interpreters.
|
||||
// The state must only be cleared by the main interpreter.
|
||||
if (_Py_IsMainInterpreter(tstate)) {
|
||||
_PyAST_Fini(tstate);
|
||||
}
|
||||
|
||||
_PyExc_Fini(tstate);
|
||||
_PyFrame_Fini(tstate);
|
||||
_PyAsyncGen_Fini(tstate);
|
||||
|
@ -1591,8 +1585,6 @@ finalize_interp_clear(PyThreadState *tstate)
|
|||
_Py_ClearFileSystemEncoding();
|
||||
}
|
||||
|
||||
_PyWarnings_Fini(tstate->interp);
|
||||
|
||||
finalize_interp_types(tstate);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue