summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormpage <mpage@meta.com>2024-04-26 14:39:08 (GMT)
committerGitHub <noreply@github.com>2024-04-26 14:39:08 (GMT)
commita5eeb832c2bbbd6ce1e9d545a553de926af468d5 (patch)
tree6c23800987d3b4f6bded2e46f7840f6964a14846
parent5a4d3df2fa02409ffd2a90cd75b67370206e9891 (diff)
downloadcpython-a5eeb832c2bbbd6ce1e9d545a553de926af468d5.zip
cpython-a5eeb832c2bbbd6ce1e9d545a553de926af468d5.tar.gz
cpython-a5eeb832c2bbbd6ce1e9d545a553de926af468d5.tar.bz2
gh-117657: Fix race data race in `_Py_IsOwnedByCurrentThread()` (#118258)
-rw-r--r--Include/object.h4
-rw-r--r--Tools/tsan/suppressions_free_threading.txt1
2 files changed, 4 insertions, 1 deletions
diff --git a/Include/object.h b/Include/object.h
index 5aaf11c..9132784 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -303,7 +303,11 @@ _Py_ThreadId(void)
static inline Py_ALWAYS_INLINE int
_Py_IsOwnedByCurrentThread(PyObject *ob)
{
+#ifdef _Py_THREAD_SANITIZER
+ return _Py_atomic_load_uintptr_relaxed(&ob->ob_tid) == _Py_ThreadId();
+#else
return ob->ob_tid == _Py_ThreadId();
+#endif
}
#endif
diff --git a/Tools/tsan/suppressions_free_threading.txt b/Tools/tsan/suppressions_free_threading.txt
index e4ca32b..4b1a2fd 100644
--- a/Tools/tsan/suppressions_free_threading.txt
+++ b/Tools/tsan/suppressions_free_threading.txt
@@ -14,7 +14,6 @@ race:set_allocator_unlocked
race:_add_to_weak_set
race:_in_weak_set
race:_mi_heap_delayed_free_partial
-race:_Py_IsOwnedByCurrentThread
race:_PyEval_EvalFrameDefault
race:_PyFunction_SetVersion
race:_PyImport_AcquireLock