mirror of
https://github.com/python/cpython.git
synced 2026-03-06 04:50:58 +00:00
[3.13] gh-117657: Fix race involving GC and heap initialization (GH-119923) (#120038)
The `_PyThreadState_Bind()` function is called before the first
`PyEval_AcquireThread()` so it's not synchronized with the stop the
world GC. We had a race where `gc_visit_heaps()` might visit a thread's
heap while it's being initialized.
Use a simple atomic int to avoid visiting heaps for threads that are not
yet fully initialized (i.e., before `tstate_mimalloc_bind()` is called).
The race was reproducible by running:
`python Lib/test/test_importlib/partial/pool_in_threads.py`.
(cherry picked from commit e69d068ad0)
Co-authored-by: Sam Gross <colesbury@gmail.com>
This commit is contained in:
parent
720a44d414
commit
ee7d2681f6
4 changed files with 7 additions and 3 deletions
|
|
@ -3074,6 +3074,8 @@ tstate_mimalloc_bind(PyThreadState *tstate)
|
|||
// _PyObject_GC_New() and similar functions temporarily override this to
|
||||
// use one of the GC heaps.
|
||||
mts->current_object_heap = &mts->heaps[_Py_MIMALLOC_HEAP_OBJECT];
|
||||
|
||||
_Py_atomic_store_int(&mts->initialized, 1);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue