summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2003-04-15 14:10:09 (GMT)
committerGuido van Rossum <guido@python.org>2003-04-15 14:10:09 (GMT)
commitd922fa46ce0763e63c3d6a14bc89059b0eef33ea (patch)
treef3492021c7986307d35530ea9f442c189d70f826
parent28e83e3a668c9098595c858aae04d69022306fdb (diff)
downloadcpython-d922fa46ce0763e63c3d6a14bc89059b0eef33ea.zip
cpython-d922fa46ce0763e63c3d6a14bc89059b0eef33ea.tar.gz
cpython-d922fa46ce0763e63c3d6a14bc89059b0eef33ea.tar.bz2
Move the call to _Py_PrintReferences() a bit further down. This
prevents it from showing stuff (like codec state) that is cleared when the interpreter state is cleared.
-rw-r--r--Python/pythonrun.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 2de1bde..fdbd19f 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -270,12 +270,6 @@ Py_Finalize(void)
fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
#endif
-#ifdef Py_TRACE_REFS
- if (Py_GETENV("PYTHONDUMPREFS")) {
- _Py_PrintReferences(stderr);
- }
-#endif /* Py_TRACE_REFS */
-
/* 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
@@ -283,11 +277,22 @@ Py_Finalize(void)
*/
_PyExc_Fini();
- /* Delete current thread */
+ /* Clear interpreter state */
PyInterpreterState_Clear(interp);
+
+#ifdef Py_TRACE_REFS
+ /* Dump references -- this may implicitly need the thread state,
+ so this is the last possible place where we can do this. */
+ if (Py_GETENV("PYTHONDUMPREFS")) {
+ _Py_PrintReferences(stderr);
+ }
+#endif /* Py_TRACE_REFS */
+
+ /* Delete current thread */
PyThreadState_Swap(NULL);
PyInterpreterState_Delete(interp);
+ /* Sundry finalizers */
PyMethod_Fini();
PyFrame_Fini();
PyCFunction_Fini();