]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-142048: Fix lost gc allocations count on thread cleanup (GH… (#142506)
authorKumar Aditya <kumaraditya@python.org>
Thu, 11 Dec 2025 09:37:38 +0000 (15:07 +0530)
committerGitHub <noreply@github.com>
Thu, 11 Dec 2025 09:37:38 +0000 (15:07 +0530)
[3.13] gh-142048: Fix lost gc allocations count on thread cleanup (GH-142233)
(cherry picked from commit 49b1fb43f65290dadeb83ed6f7c0c74995fda7a1)

Co-authored-by: Kevin Wang <kevmo314@gmail.com>
Python/pystate.c

index ba62a93d4574e6051069e2e7222537c510ed9590..68e76e4aed5a3930387bf3e91cbc4cb513847538 100644 (file)
@@ -1743,6 +1743,14 @@ PyThreadState_Clear(PyThreadState *tstate)
 
     // Remove ourself from the biased reference counting table of threads.
     _Py_brc_remove_thread(tstate);
+
+    // Flush the thread's local GC allocation count to the global count
+    // before the thread state is cleared, otherwise the count is lost.
+    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
+    _Py_atomic_add_int(&tstate->interp->gc.generations[0].count,
+                       (int)tstate_impl->gc.alloc_count);
+    tstate_impl->gc.alloc_count = 0;
+
 #endif
 
     // Merge our queue of pointers to be freed into the interpreter queue.