summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2024-06-02 14:42:46 (GMT)
committerGitHub <noreply@github.com>2024-06-02 14:42:46 (GMT)
commit9d3de7b0edf46cc0f6aed586111464b2ad581f5a (patch)
tree1680d31f3ccd701347098846d3f6b9a69dbb15c2
parentcf8f292a362c3715c536ff90d3e5d0c98ecf2bf0 (diff)
downloadcpython-9d3de7b0edf46cc0f6aed586111464b2ad581f5a.zip
cpython-9d3de7b0edf46cc0f6aed586111464b2ad581f5a.tar.gz
cpython-9d3de7b0edf46cc0f6aed586111464b2ad581f5a.tar.bz2
[3.13] gh-117657: Fix TSAN reported race in `_PyEval_IsGILEnabled`. (GH-119921) (#119939)
The GIL may be disabled concurrently with this call so we need to use a relaxed atomic load. (cherry picked from commit f3b89a63cbb6d46e5ed40d5cd9813cdf9189ce35) Co-authored-by: Sam Gross <colesbury@gmail.com>
-rw-r--r--Include/internal/pycore_ceval.h3
-rw-r--r--Tools/tsan/suppressions_free_threading.txt1
2 files changed, 2 insertions, 2 deletions
diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h
index bd3ba12..26ede31 100644
--- a/Include/internal/pycore_ceval.h
+++ b/Include/internal/pycore_ceval.h
@@ -145,7 +145,8 @@ extern void _PyEval_ReleaseLock(PyInterpreterState *, PyThreadState *,
static inline int
_PyEval_IsGILEnabled(PyThreadState *tstate)
{
- return tstate->interp->ceval.gil->enabled != 0;
+ struct _gil_runtime_state *gil = tstate->interp->ceval.gil;
+ return _Py_atomic_load_int_relaxed(&gil->enabled) != 0;
}
// Enable or disable the GIL used by the interpreter that owns tstate, which
diff --git a/Tools/tsan/suppressions_free_threading.txt b/Tools/tsan/suppressions_free_threading.txt
index 42ab27e..a451c9d 100644
--- a/Tools/tsan/suppressions_free_threading.txt
+++ b/Tools/tsan/suppressions_free_threading.txt
@@ -66,7 +66,6 @@ race_top:list_get_item_ref
race_top:make_pending_calls
race_top:set_add_entry
race_top:should_intern_string
-race_top:_PyEval_IsGILEnabled
race_top:llist_insert_tail
race_top:_Py_slot_tp_getattr_hook
race_top:add_threadstate