mirror of
https://github.com/python/cpython.git
synced 2025-09-19 23:20:25 +00:00
gh-112529: Make the GC scheduling thread-safe (#114880)
The GC keeps track of the number of allocations (less deallocations) since the last GC. This buffers the count in thread-local state and uses atomic operations to modify the per-interpreter count. The thread-local buffering avoids contention on shared state. A consequence is that the GC scheduling is not as precise, so "test_sneaky_frame_object" is skipped because it requires that the GC be run exactly after allocating a frame object.
This commit is contained in:
parent
f92857a930
commit
b24c9161a6
7 changed files with 71 additions and 16 deletions
|
@ -1835,6 +1835,8 @@ _PyType_AllocNoTrack(PyTypeObject *type, Py_ssize_t nitems)
|
|||
if (presize) {
|
||||
((PyObject **)alloc)[0] = NULL;
|
||||
((PyObject **)alloc)[1] = NULL;
|
||||
}
|
||||
if (PyType_IS_GC(type)) {
|
||||
_PyObject_GC_Link(obj);
|
||||
}
|
||||
memset(obj, '\0', size);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue