https://github.com/python/cpython/commit/2d4955fcf2a54d7ffc06a48774863ff65ba250d2
commit: 2d4955fcf2a54d7ffc06a48774863ff65ba250d2
branch: main
author: Donghee Na <[email protected]>
committer: corona10 <[email protected]>
date: 2024-03-07T08:29:39+09:00
summary:

gh-116397: Move the _PyGC_ClearAllFreeLists to the safe point (gh-116414)

files:
M Python/gc_free_threading.c

diff --git a/Python/gc_free_threading.c b/Python/gc_free_threading.c
index 18893c6c391fff..c7883cd38644e1 100644
--- a/Python/gc_free_threading.c
+++ b/Python/gc_free_threading.c
@@ -1058,6 +1058,8 @@ gc_collect_internal(PyInterpreterState *interp, struct 
collection_state *state)
     // Handle any objects that may have resurrected after the finalization.
     _PyEval_StopTheWorld(interp);
     err = handle_resurrected_objects(state);
+    // Clear free lists in all threads
+    _PyGC_ClearAllFreeLists(interp);
     _PyEval_StartTheWorld(interp);
 
     if (err < 0) {
@@ -1160,8 +1162,9 @@ gc_collect_main(PyThreadState *tstate, int generation, 
_PyGC_Reason reason)
             n+m, n, d);
     }
 
-    // Clear free lists in all threads
-    _PyGC_ClearAllFreeLists(interp);
+    // Clear the current thread's free-list again.
+    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
+    _PyObject_ClearFreeLists(&tstate_impl->freelists, 0);
 
     if (_PyErr_Occurred(tstate)) {
         if (reason == _Py_GC_REASON_SHUTDOWN) {

_______________________________________________
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