]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-117657: Fix data race in `new_reference` for free threaded build (gh-129665)
authorBogdan Romanyuk <65823030+wrongnull@users.noreply.github.com>
Thu, 6 Feb 2025 20:35:37 +0000 (23:35 +0300)
committerGitHub <noreply@github.com>
Thu, 6 Feb 2025 20:35:37 +0000 (15:35 -0500)
Objects/object.c
Tools/tsan/suppressions_free_threading.txt

index fdff16138201a0f7ef687e386625638cd887ce99..f3c7fa6d906ad6e39e249e35d07f167b0f09142f 100644 (file)
@@ -2485,13 +2485,20 @@ new_reference(PyObject *op)
     op->ob_refcnt = 1;
 #endif
 #else
-    op->ob_tid = _Py_ThreadId();
     op->ob_flags = 0;
     op->ob_mutex = (PyMutex){ 0 };
+#ifdef _Py_THREAD_SANITIZER
+    _Py_atomic_store_uintptr_relaxed(&op->ob_tid, _Py_ThreadId());
+    _Py_atomic_store_uint8_relaxed(&op->ob_gc_bits, 0);
+    _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, 1);
+    _Py_atomic_store_ssize_relaxed(&op->ob_ref_shared, 0);
+#else
+    op->ob_tid = _Py_ThreadId();
     op->ob_gc_bits = 0;
     op->ob_ref_local = 1;
     op->ob_ref_shared = 0;
 #endif
+#endif
 #ifdef Py_TRACE_REFS
     _Py_AddToAllObjects(op);
 #endif
index e5eb665ae212de5a9e7a11b7d353c0690d06235f..b25b3700b35613982a1034518b989a1816cdfa87 100644 (file)
@@ -22,7 +22,6 @@ race:free_threadstate
 # These warnings trigger directly in a CPython function.
 
 race_top:assign_version_tag
-race_top:new_reference
 race_top:_multiprocessing_SemLock_acquire_impl
 race_top:list_get_item_ref
 race_top:_Py_slot_tp_getattr_hook