]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-117657: Fix TSAN race in QSBR assertion (#119887)
authorSam Gross <colesbury@gmail.com>
Sat, 1 Jun 2024 14:04:38 +0000 (10:04 -0400)
committerGitHub <noreply@github.com>
Sat, 1 Jun 2024 14:04:38 +0000 (10:04 -0400)
Due to a limitation in TSAN, all reads from `PyThreadState.state` must be
atomic to avoid reported races.

Python/qsbr.c
Tools/tsan/suppressions_free_threading.txt

index 9cbce9044e2941c6ccac45ac08dde16211df247e..a7321154a62ffc837f343c2a77a1f754cb894649 100644 (file)
@@ -160,7 +160,8 @@ qsbr_poll_scan(struct _qsbr_shared *shared)
 bool
 _Py_qsbr_poll(struct _qsbr_thread_state *qsbr, uint64_t goal)
 {
-    assert(_PyThreadState_GET()->state == _Py_THREAD_ATTACHED);
+    assert(_Py_atomic_load_int_relaxed(&_PyThreadState_GET()->state) == _Py_THREAD_ATTACHED);
+
     if (_Py_qbsr_goal_reached(qsbr, goal)) {
         return true;
     }
index 951635e7c6533dacd66cd9fef324e956ea4f3030..9a53990f8b2ff851ed02fa2c6176d73808a924e4 100644 (file)
@@ -75,8 +75,6 @@ race_top:_PyFrame_GetCode
 race_top:_PyFrame_Initialize
 race_top:PyInterpreterState_ThreadHead
 race_top:_PyObject_TryGetInstanceAttribute
-race_top:_Py_qsbr_unregister
-race_top:_Py_qsbr_poll
 race_top:PyThreadState_Next
 race_top:Py_TYPE
 race_top:PyUnstable_InterpreterFrame_GetLine