https://github.com/python/cpython/commit/2e91578a76d38fa8895fce95e2661618c3de892c
commit: 2e91578a76d38fa8895fce95e2661618c3de892c
branch: main
author: Donghee Na <[email protected]>
committer: corona10 <[email protected]>
date: 2024-03-03T06:44:16+09:00
summary:

gh-115103: Update refleak checker to trigger _PyMem_ProcessDelayed (gh-116238)

files:
M Python/gc_free_threading.c

diff --git a/Python/gc_free_threading.c b/Python/gc_free_threading.c
index d4fb50106093ee..18893c6c391fff 100644
--- a/Python/gc_free_threading.c
+++ b/Python/gc_free_threading.c
@@ -324,6 +324,23 @@ merge_all_queued_objects(PyInterpreterState *interp, 
struct collection_state *st
     HEAD_UNLOCK(&_PyRuntime);
 }
 
+static void
+process_delayed_frees(PyInterpreterState *interp)
+{
+    // In STW status, we can observe the latest write sequence by
+    // advancing the write sequence immediately.
+    _Py_qsbr_advance(&interp->qsbr);
+    _PyThreadStateImpl *current_tstate = (_PyThreadStateImpl 
*)_PyThreadState_GET();
+    _Py_qsbr_quiescent_state(current_tstate->qsbr);
+    HEAD_LOCK(&_PyRuntime);
+    PyThreadState *tstate = interp->threads.head;
+    while (tstate != NULL) {
+        _PyMem_ProcessDelayed(tstate);
+        tstate = (PyThreadState *)tstate->next;
+    }
+    HEAD_UNLOCK(&_PyRuntime);
+}
+
 // Subtract an incoming reference from the computed "gc_refs" refcount.
 static int
 visit_decref(PyObject *op, void *arg)
@@ -1006,6 +1023,7 @@ gc_collect_internal(PyInterpreterState *interp, struct 
collection_state *state)
     _PyEval_StopTheWorld(interp);
     // merge refcounts for all queued objects
     merge_all_queued_objects(interp, state);
+    process_delayed_frees(interp);
 
     // Find unreachable objects
     int err = deduce_unreachable_heap(interp, state);

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to