mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
Changed the finalization order again so that the reference count
printing (when Py_DEBUG is defined) happens while there's still a current thread...
This commit is contained in:
parent
be1eb0d9ed
commit
1707aad27c
1 changed files with 18 additions and 13 deletions
|
@ -198,13 +198,29 @@ Py_Finalize()
|
||||||
/* Destroy all modules */
|
/* Destroy all modules */
|
||||||
PyImport_Cleanup();
|
PyImport_Cleanup();
|
||||||
|
|
||||||
|
/* Destroy the database used by _PyImport_{Fixup,Find}Extension */
|
||||||
|
_PyImport_Fini();
|
||||||
|
|
||||||
|
/* Debugging stuff */
|
||||||
|
#ifdef COUNT_ALLOCS
|
||||||
|
dump_counts();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef Py_REF_DEBUG
|
||||||
|
fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef Py_TRACE_REFS
|
||||||
|
if (_Py_AskYesNo("Print left references?")) {
|
||||||
|
_Py_PrintReferences(stderr);
|
||||||
|
}
|
||||||
|
#endif /* Py_TRACE_REFS */
|
||||||
|
|
||||||
/* Delete current thread */
|
/* Delete current thread */
|
||||||
PyInterpreterState_Clear(interp);
|
PyInterpreterState_Clear(interp);
|
||||||
PyThreadState_Swap(NULL);
|
PyThreadState_Swap(NULL);
|
||||||
PyInterpreterState_Delete(interp);
|
PyInterpreterState_Delete(interp);
|
||||||
|
|
||||||
_PyImport_Fini();
|
|
||||||
|
|
||||||
/* Now we decref the exception classes. After this point nothing
|
/* Now we decref the exception classes. After this point nothing
|
||||||
can raise an exception. That's okay, because each Fini() method
|
can raise an exception. That's okay, because each Fini() method
|
||||||
below has been checked to make sure no exceptions are ever
|
below has been checked to make sure no exceptions are ever
|
||||||
|
@ -229,18 +245,7 @@ Py_Finalize()
|
||||||
|
|
||||||
call_ll_exitfuncs();
|
call_ll_exitfuncs();
|
||||||
|
|
||||||
#ifdef COUNT_ALLOCS
|
|
||||||
dump_counts();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Py_REF_DEBUG
|
|
||||||
fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Py_TRACE_REFS
|
#ifdef Py_TRACE_REFS
|
||||||
if (_Py_AskYesNo("Print left references?")) {
|
|
||||||
_Py_PrintReferences(stderr);
|
|
||||||
}
|
|
||||||
_Py_ResetReferences();
|
_Py_ResetReferences();
|
||||||
#endif /* Py_TRACE_REFS */
|
#endif /* Py_TRACE_REFS */
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue