gh-117657: Fix TSAN data race in _PyEval_SetTrace assertion (gh-131561)

The `sys_tracing_threads` variable should be read inside `LOCK_SETUP()`.
This commit is contained in:
Sam Gross 2025-03-21 14:22:37 -04:00 committed by GitHub
parent 3e2cceaa87
commit 0de5e0c544
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -594,10 +594,10 @@ _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg)
if (_PySys_Audit(current_tstate, "sys.settrace", NULL) < 0) {
return -1;
}
assert(tstate->interp->sys_tracing_threads >= 0);
// needs to be decref'd outside of the lock
PyObject *old_traceobj;
LOCK_SETUP();
assert(tstate->interp->sys_tracing_threads >= 0);
Py_ssize_t tracing_threads = setup_tracing(tstate, func, arg, &old_traceobj);
UNLOCK_SETUP();
Py_XDECREF(old_traceobj);