From d922fa46ce0763e63c3d6a14bc89059b0eef33ea Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 15 Apr 2003 14:10:09 +0000 Subject: 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. --- Python/pythonrun.c | 19 ++++++++++++------- 1 file 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(); -- cgit v0.12