Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[3.13] gh-117657: Fix race involving GC and heap initialization (GH-119923) #120038

Merged
merged 1 commit into from
Jun 4, 2024

Conversation

miss-islington
Copy link
Contributor

@miss-islington miss-islington commented Jun 4, 2024

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 e69d068)

Co-authored-by: Sam Gross colesbury@gmail.com

…nGH-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`.
(cherry picked from commit e69d068)

Co-authored-by: Sam Gross <colesbury@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants