]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-117657: Fix TSAN data race in _PyEval_SetTrace assertion (gh-131561)
authorSam Gross <colesbury@gmail.com>
Fri, 21 Mar 2025 18:22:37 +0000 (14:22 -0400)
committerGitHub <noreply@github.com>
Fri, 21 Mar 2025 18:22:37 +0000 (14:22 -0400)
The `sys_tracing_threads` variable should be read inside `LOCK_SETUP()`.

Python/legacy_tracing.c

index bafc2356280b374e82be32a68970f71a20f7d704..d308a2a40992c61c403241ff5b001f58315d0661 100644 (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);