]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-117657: use relaxed loads for checking dict keys immortality (#118067)
authorDino Viehland <dinoviehland@meta.com>
Fri, 19 Apr 2024 16:25:08 +0000 (09:25 -0700)
committerGitHub <noreply@github.com>
Fri, 19 Apr 2024 16:25:08 +0000 (09:25 -0700)
Use relaxed load to check if dictkeys are immortal

Objects/dictobject.c
Tools/tsan/suppressions_free_threading.txt

index 58f34c32a87ea94d754d3876881595f994e59292..c3516dff973745504e2655bc75b304d416fc8fa5 100644 (file)
@@ -441,7 +441,7 @@ static void free_keys_object(PyDictKeysObject *keys, bool use_qsbr);
 static inline void
 dictkeys_incref(PyDictKeysObject *dk)
 {
-    if (dk->dk_refcnt == _Py_IMMORTAL_REFCNT) {
+    if (FT_ATOMIC_LOAD_SSIZE_RELAXED(dk->dk_refcnt) == _Py_IMMORTAL_REFCNT) {
         return;
     }
 #ifdef Py_REF_DEBUG
@@ -453,7 +453,7 @@ dictkeys_incref(PyDictKeysObject *dk)
 static inline void
 dictkeys_decref(PyInterpreterState *interp, PyDictKeysObject *dk, bool use_qsbr)
 {
-    if (dk->dk_refcnt == _Py_IMMORTAL_REFCNT) {
+    if (FT_ATOMIC_LOAD_SSIZE_RELAXED(dk->dk_refcnt) == _Py_IMMORTAL_REFCNT) {
         return;
     }
     assert(dk->dk_refcnt > 0);
index 80191d6c2484e6f5d6de79c73ab7fd503a36c061..1408103ba80f96f02314ae9e2021550cca86fb19 100644 (file)
@@ -29,8 +29,6 @@ race:_PyType_HasFeature
 race:assign_version_tag
 race:compare_unicode_unicode
 race:delitem_common
-race:dictkeys_decref
-race:dictkeys_incref
 race:dictresize
 race:gc_collect_main
 race:gc_restore_tid