]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
gh-117657: Fix race involving GC and heap initialization (#119923)
authorSam Gross <colesbury@gmail.com>
Tue, 4 Jun 2024 13:42:13 +0000 (09:42 -0400)
committerGitHub <noreply@github.com>
Tue, 4 Jun 2024 13:42:13 +0000 (09:42 -0400)
commite69d068ad0bd6a25434ea476a647b635da4d82bb
tree516b36fa60e740c6ffb7a38bcc73b423783477c3
parentbd8c1f97e1709b5e8b07c31b1bc7b73acc76169d
gh-117657: Fix race involving GC and heap initialization (#119923)

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`.
Include/internal/pycore_mimalloc.h
Python/gc_free_threading.c
Python/pystate.c
Tools/tsan/suppressions_free_threading.txt