https://github.com/python/cpython/commit/01393ffbe67b679321e2aa59c02acc331149b03b commit: 01393ffbe67b679321e2aa59c02acc331149b03b branch: 3.13 author: Sam Gross <[email protected]> committer: colesbury <[email protected]> date: 2025-12-02T00:31:36Z summary:
[3.13] gh-142048: Fix quadratically increasing GC delays (gh-142051) (#142167) The GC for the free threaded build would get slower with each collection due to effectively double counting objects freed by the GC. (cherry picked from commit eb892868b31322d7cf271bc25923e14b1f67ae38) Co-authored-by: Kevin Wang <[email protected]> files: A Misc/NEWS.d/next/Core and Builtins/2025-12-01-20-41-26.gh-issue-142048.c2YosX.rst M Python/gc_free_threading.c diff --git a/Misc/NEWS.d/next/Core and Builtins/2025-12-01-20-41-26.gh-issue-142048.c2YosX.rst b/Misc/NEWS.d/next/Core and Builtins/2025-12-01-20-41-26.gh-issue-142048.c2YosX.rst new file mode 100644 index 00000000000000..1400dae13ffe32 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2025-12-01-20-41-26.gh-issue-142048.c2YosX.rst @@ -0,0 +1,2 @@ +Fix quadratically increasing garbage collection delays in free-threaded +build. diff --git a/Python/gc_free_threading.c b/Python/gc_free_threading.c index 6a38cc224a4bf8..7c7e7b21e55a7d 100644 --- a/Python/gc_free_threading.c +++ b/Python/gc_free_threading.c @@ -1100,7 +1100,19 @@ record_deallocation(PyThreadState *tstate) gc->alloc_count--; if (gc->alloc_count <= -LOCAL_ALLOC_COUNT_THRESHOLD) { GCState *gcstate = &tstate->interp->gc; - _Py_atomic_add_int(&gcstate->generations[0].count, (int)gc->alloc_count); + int count = _Py_atomic_load_int_relaxed(&gcstate->generations[0].count); + int new_count; + do { + if (count == 0) { + break; + } + new_count = count + (int)gc->alloc_count; + if (new_count < 0) { + new_count = 0; + } + } while (!_Py_atomic_compare_exchange_int(&gcstate->generations[0].count, + &count, + new_count)); gc->alloc_count = 0; } } _______________________________________________ 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]
