diff options
author | Sam Gross <colesbury@gmail.com> | 2024-06-01 14:04:38 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-01 14:04:38 (GMT) |
commit | 90ec19fd33e2452902b9788d4821f1fbf6542304 (patch) | |
tree | 1d5d42f7a15526604b7021aa177337df06c9e8fd /Python/qsbr.c | |
parent | 60593b2052ca275559c11028d50e19f8e5dfee13 (diff) | |
download | cpython-90ec19fd33e2452902b9788d4821f1fbf6542304.zip cpython-90ec19fd33e2452902b9788d4821f1fbf6542304.tar.gz cpython-90ec19fd33e2452902b9788d4821f1fbf6542304.tar.bz2 |
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.
Diffstat (limited to 'Python/qsbr.c')
-rw-r--r-- | Python/qsbr.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/Python/qsbr.c b/Python/qsbr.c index 9cbce90..a732115 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; } |