summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2003-04-17 15:21:01 +0000
committerTim Peters <tim.peters@gmail.com>2003-04-17 15:21:01 +0000
commit8e18c8b76c6b0731dfad20a0fe8ce6f23d337a4d (patch)
tree8438b04469b7162ec7b40538664b632196225f46
parent48065499338e746848b012c1d8d1a27865e8f16f (diff)
downloadcpython-8e18c8b76c6b0731dfad20a0fe8ce6f23d337a4d.tar.gz
Py_Finalize(): Reverted recent changes that tried to move the
PYTHONDUMPREFS output after most teardown. Attempts to use PYTHONDUMPREFS with the Zope3 test suite died with Py_FatalError(), since _Py_PrintReferences() can end up executing arbitrary Python code (for objects that override __repr__), and that requires an intact interpreter.
-rw-r--r--Python/pythonrun.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index fbf4283ea9..84c16b5769 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -270,6 +270,17 @@ Py_Finalize(void)
fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
#endif
+#ifdef Py_TRACE_REFS
+ /* Display all objects still alive -- this can invoke arbitrary
+ * __repr__ overrides, so requires a mostly-intact interpreter.
+ * Alas, a lot of stuff may still be alive now that will be cleaned
+ * up later.
+ */
+ 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
@@ -306,14 +317,6 @@ Py_Finalize(void)
PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
-#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 */
-
#ifdef PYMALLOC_DEBUG
if (Py_GETENV("PYTHONMALLOCSTATS"))
_PyObject_DebugMallocStats();