diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2024-06-04 14:08:10 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-04 14:08:10 (GMT) |
commit | ee7d2681f6e2ece539bc70d21893353da84401fd (patch) | |
tree | 5b98fcd4c861ee81204711e2a679746b6cf5a507 /Tools | |
parent | 720a44d414b68943c766716145d7c6d15ea213de (diff) | |
download | cpython-ee7d2681f6e2ece539bc70d21893353da84401fd.zip cpython-ee7d2681f6e2ece539bc70d21893353da84401fd.tar.gz cpython-ee7d2681f6e2ece539bc70d21893353da84401fd.tar.bz2 |
[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>
Diffstat (limited to 'Tools')
-rw-r--r-- | Tools/tsan/suppressions_free_threading.txt | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/Tools/tsan/suppressions_free_threading.txt b/Tools/tsan/suppressions_free_threading.txt index d5fcac6..8b64d1f 100644 --- a/Tools/tsan/suppressions_free_threading.txt +++ b/Tools/tsan/suppressions_free_threading.txt @@ -25,7 +25,6 @@ race:free_threadstate race_top:_add_to_weak_set race_top:_in_weak_set -race_top:_mi_heap_delayed_free_partial race_top:_PyEval_EvalFrameDefault race_top:_PyImport_AcquireLock race_top:_PyImport_ReleaseLock @@ -33,7 +32,6 @@ race_top:_PyType_HasFeature race_top:assign_version_tag race_top:insertdict race_top:lookup_tp_dict -race_top:mi_heap_visit_pages race_top:PyMember_GetOne race_top:PyMember_SetOne race_top:new_reference @@ -58,7 +56,6 @@ race_top:_Py_slot_tp_getattr_hook race_top:add_threadstate race_top:dump_traceback race_top:fatal_error -race_top:mi_page_decode_padding race_top:_multiprocessing_SemLock_release_impl race_top:_PyFrame_GetCode race_top:_PyFrame_Initialize |