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:
Guido van Rossum 1997-12-08 23:43:45 +00:00
parent be1eb0d9ed
commit 1707aad27c
1 changed files with 18 additions and 13 deletions

View File

@ -198,13 +198,29 @@ Py_Finalize()
/* Destroy all modules */
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 */
PyInterpreterState_Clear(interp);
PyThreadState_Swap(NULL);
PyInterpreterState_Delete(interp);
_PyImport_Fini();
/* Now we decref the exception classes. After this point nothing
can raise an exception. That's okay, because each Fini() method
below has been checked to make sure no exceptions are ever
@ -229,18 +245,7 @@ Py_Finalize()
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
if (_Py_AskYesNo("Print left references?")) {
_Py_PrintReferences(stderr);
}
_Py_ResetReferences();
#endif /* Py_TRACE_REFS */
}