Quiet TSAN warnings about remaining non-atomic accesses of `tstate->state`
PyThreadState *tstate = NULL;
if (detach) {
tstate = _PyThreadState_GET();
- if (tstate && tstate->state == _Py_THREAD_ATTACHED) {
+ if (tstate && _Py_atomic_load_int_relaxed(&tstate->state) ==
+ _Py_THREAD_ATTACHED) {
// Only detach if we are attached
PyEval_ReleaseThread(tstate);
}
{
_PyRuntimeState *runtime = &_PyRuntime;
- assert(tstate->state == _Py_THREAD_ATTACHED);
+ assert(_Py_atomic_load_int_relaxed(&tstate->state) == _Py_THREAD_ATTACHED);
struct _stoptheworld_state *stw = NULL;
HEAD_LOCK(runtime);