mirror of
https://github.com/python/cpython.git
synced 2025-07-12 13:55:34 +00:00
gh-117783: Immortalize objects that use deferred reference counting (#118112)
Deferred reference counting is not fully implemented yet. As a temporary measure, we immortalize objects that would use deferred reference counting to avoid multi-threaded scaling bottlenecks. This is only performed in the free-threaded build once the first non-main thread is started. Additionally, some tests, including refleak tests, suppress this behavior.
This commit is contained in:
parent
8d4b756fd3
commit
7ccacb220d
13 changed files with 134 additions and 8 deletions
|
@ -2430,6 +2430,13 @@ _PyObject_SetDeferredRefcount(PyObject *op)
|
|||
assert(PyType_IS_GC(Py_TYPE(op)));
|
||||
assert(_Py_IsOwnedByCurrentThread(op));
|
||||
assert(op->ob_ref_shared == 0);
|
||||
PyInterpreterState *interp = _PyInterpreterState_GET();
|
||||
if (interp->gc.immortalize.enabled) {
|
||||
// gh-117696: immortalize objects instead of using deferred reference
|
||||
// counting for now.
|
||||
_Py_SetImmortal(op);
|
||||
return;
|
||||
}
|
||||
op->ob_gc_bits |= _PyGC_BITS_DEFERRED;
|
||||
op->ob_ref_local += 1;
|
||||
op->ob_ref_shared = _Py_REF_QUEUED;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue