https://github.com/python/cpython/commit/90ec19fd33e2452902b9788d4821f1fbf6542304
commit: 90ec19fd33e2452902b9788d4821f1fbf6542304
branch: main
author: Sam Gross <[email protected]>
committer: colesbury <[email protected]>
date: 2024-06-01T10:04:38-04:00
summary:

gh-117657: Fix TSAN race in QSBR assertion (#119887)

Due to a limitation in TSAN, all reads from `PyThreadState.state` must be
atomic to avoid reported races.

files:
M Python/qsbr.c
M Tools/tsan/suppressions_free_threading.txt

diff --git a/Python/qsbr.c b/Python/qsbr.c
index 9cbce9044e2941..a7321154a62ffc 100644
--- a/Python/qsbr.c
+++ b/Python/qsbr.c
@@ -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;
     }
diff --git a/Tools/tsan/suppressions_free_threading.txt 
b/Tools/tsan/suppressions_free_threading.txt
index 951635e7c6533d..9a53990f8b2ff8 100644
--- a/Tools/tsan/suppressions_free_threading.txt
+++ b/Tools/tsan/suppressions_free_threading.txt
@@ -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

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to