Issue #1545463: Global variables caught in reference cycles are now garbage-collected at shutdown.

This commit is contained in:
Antoine Pitrou 2013-05-06 21:15:57 +02:00
parent 1df37c657d
commit 5f454a07a0
6 changed files with 56 additions and 5 deletions

View file

@ -403,6 +403,14 @@ PyImport_Cleanup(void)
}
}
/* Collect garbage remaining after deleting the modules. Mostly
reference cycles created by classes. */
PyGC_Collect();
/* Dump GC stats before it's too late, since it uses the warnings
machinery. */
_PyGC_DumpShutdownStats();
/* Next, delete sys and builtins (in that order) */
value = PyDict_GetItemString(modules, "sys");
if (value != NULL && PyModule_Check(value)) {

View file

@ -544,10 +544,6 @@ Py_Finalize(void)
while (PyGC_Collect() > 0)
/* nothing */;
#endif
/* We run this while most interpreter state is still alive, so that
debug information can be printed out */
_PyGC_Fini();
/* Destroy all modules */
PyImport_Cleanup();
@ -628,6 +624,7 @@ Py_Finalize(void)
PyFloat_Fini();
PyDict_Fini();
PySlice_Fini();
_PyGC_Fini();
/* Cleanup Unicode implementation */
_PyUnicode_Fini();