From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Fri, 21 Mar 2025 18:48:40 +0000 (+0100) Subject: [3.13] gh-117657: Fix TSAN data race in _PyEval_SetTrace assertion (gh-131561) (... X-Git-Tag: v3.13.3~94 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=94fbe97bbef374e240decc8a69107a639151ba02;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-117657: Fix TSAN data race in _PyEval_SetTrace assertion (gh-131561) (#131564) The `sys_tracing_threads` variable should be read inside `LOCK_SETUP()`. (cherry picked from commit 0de5e0c5442abddbe17481ef450e4abc992058f5) Co-authored-by: Sam Gross --- diff --git a/Python/legacy_tracing.c b/Python/legacy_tracing.c index 9cc3af1f5e16..8a9ad3601a37 100644 --- a/Python/legacy_tracing.c +++ b/Python/legacy_tracing.c @@ -596,10 +596,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);