]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
[3.13] gh-117657: Fix race involving GC and heap initialization (GH-119923) (#120038)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 4 Jun 2024 14:08:10 +0000 (16:08 +0200)
committerGitHub <noreply@github.com>
Tue, 4 Jun 2024 14:08:10 +0000 (14:08 +0000)
commitee7d2681f6e2ece539bc70d21893353da84401fd
tree5b98fcd4c861ee81204711e2a679746b6cf5a507
parent720a44d414b68943c766716145d7c6d15ea213de
[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 e69d068ad0bd6a25434ea476a647b635da4d82bb)

Co-authored-by: Sam Gross <colesbury@gmail.com>
Include/internal/pycore_mimalloc.h
Python/gc_free_threading.c
Python/pystate.c
Tools/tsan/suppressions_free_threading.txt