From c69bfa8a095ff89d420e1baf35b6fc56d5006b0b Mon Sep 17 00:00:00 2001 From: Neil Schemenauer Date: Tue, 11 Mar 2025 19:40:49 -0700 Subject: [PATCH] Move `assert()` inside lock to avoid data race. We need to hold the lock to safely read the `tstate->interp->sys_tracing_threads` value. --- Python/legacy_tracing.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/legacy_tracing.c b/Python/legacy_tracing.c index 82465c66ab5231..32dadfb712e458 100644 --- a/Python/legacy_tracing.c +++ b/Python/legacy_tracing.c @@ -582,10 +582,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);