mirror of
https://github.com/python/cpython.git
synced 2025-12-07 13:50:06 +00:00
gh-142048: Fix quadratically increasing GC delays (gh-142051)
The GC for the free threaded build would get slower with each collection due to effectively double counting objects freed by the GC.
This commit is contained in:
parent
e32c975640
commit
eb892868b3
2 changed files with 15 additions and 1 deletions
|
|
@ -0,0 +1,2 @@
|
|||
Fix quadratically increasing garbage collection delays in free-threaded
|
||||
build.
|
||||
|
|
@ -2210,7 +2210,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->young.count, (int)gc->alloc_count);
|
||||
int count = _Py_atomic_load_int_relaxed(&gcstate->young.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->young.count,
|
||||
&count,
|
||||
new_count));
|
||||
gc->alloc_count = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue