summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-01-21 12:05:26 (GMT)
committerGitHub <noreply@github.com>2022-01-21 12:05:26 (GMT)
commitea38e436fe1e585fb8c1f0badf5482f525b7f9ff (patch)
tree6ec2a9fba659376e62c80b2f596479de4c0a4793
parent54610bb448a9cf5be77d53b66169fca4c11be6cb (diff)
downloadcpython-ea38e436fe1e585fb8c1f0badf5482f525b7f9ff.zip
cpython-ea38e436fe1e585fb8c1f0badf5482f525b7f9ff.tar.gz
cpython-ea38e436fe1e585fb8c1f0badf5482f525b7f9ff.tar.bz2
bpo-46417: Call _PyDebug_PrintTotalRefs() later (GH-30744)
"python -X showrefcount" now shows the total reference count after clearing and destroyed the main Python interpreter. Previously, it was shown before. Py_FinalizeEx() now calls _PyDebug_PrintTotalRefs() after finalize_interp_delete().
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2022-01-21-12-24-14.bpo-46417.i3IqMf.rst3
-rw-r--r--Python/pylifecycle.c12
2 files changed, 9 insertions, 6 deletions
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-01-21-12-24-14.bpo-46417.i3IqMf.rst b/Misc/NEWS.d/next/Core and Builtins/2022-01-21-12-24-14.bpo-46417.i3IqMf.rst
new file mode 100644
index 0000000..c7e2ee3
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-01-21-12-24-14.bpo-46417.i3IqMf.rst
@@ -0,0 +1,3 @@
+``python -X showrefcount`` now shows the total reference count after clearing
+and destroyed the main Python interpreter. Previously, it was shown before.
+Patch by Victor Stinner.
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 0b1f471..5572f61 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -1862,12 +1862,6 @@ Py_FinalizeEx(void)
/* dump hash stats */
_PyHash_Fini();
-#ifdef Py_REF_DEBUG
- if (show_ref_count) {
- _PyDebug_PrintTotalRefs();
- }
-#endif
-
#ifdef Py_TRACE_REFS
/* Display all objects still alive -- this can invoke arbitrary
* __repr__ overrides, so requires a mostly-intact interpreter.
@@ -1895,6 +1889,12 @@ Py_FinalizeEx(void)
finalize_interp_clear(tstate);
finalize_interp_delete(tstate->interp);
+#ifdef Py_REF_DEBUG
+ if (show_ref_count) {
+ _PyDebug_PrintTotalRefs();
+ }
+#endif
+
#ifdef Py_TRACE_REFS
/* Display addresses (& refcnts) of all objects still alive.
* An address can be used to find the repr of the object, printed