summaryrefslogtreecommitdiffstats
path: root/Python/pystate.c
diff options
context:
space:
mode:
authorSam Gross <colesbury@gmail.com>2024-04-08 16:11:36 (GMT)
committerGitHub <noreply@github.com>2024-04-08 16:11:36 (GMT)
commit1a6594f66166206b08f24c3ba633c85f86f99a56 (patch)
tree961c4d6e2f694e482636643993cd17ebbf9ea2fd /Python/pystate.c
parent2067da25796ea3254d0edf61a39bcc0326c4f71d (diff)
downloadcpython-1a6594f66166206b08f24c3ba633c85f86f99a56.zip
cpython-1a6594f66166206b08f24c3ba633c85f86f99a56.tar.gz
cpython-1a6594f66166206b08f24c3ba633c85f86f99a56.tar.bz2
gh-117439: Make refleak checking thread-safe without the GIL (#117469)
This keeps track of the per-thread total reference count operations in PyThreadState in the free-threaded builds. The count is merged into the interpreter's total when the thread exits.
Diffstat (limited to 'Python/pystate.c')
-rw-r--r--Python/pystate.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/Python/pystate.c b/Python/pystate.c
index cee481c..4a52f64 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -1698,6 +1698,14 @@ tstate_delete_common(PyThreadState *tstate)
decrement_stoptheworld_countdown(&runtime->stoptheworld);
}
}
+
+#if defined(Py_REF_DEBUG) && defined(Py_GIL_DISABLED)
+ // Add our portion of the total refcount to the interpreter's total.
+ _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
+ tstate->interp->object_state.reftotal += tstate_impl->reftotal;
+ tstate_impl->reftotal = 0;
+#endif
+
HEAD_UNLOCK(runtime);
#ifdef Py_GIL_DISABLED