From: Dino Viehland Date: Fri, 19 Apr 2024 16:25:08 +0000 (-0700) Subject: gh-117657: use relaxed loads for checking dict keys immortality (#118067) X-Git-Tag: v3.13.0b1~333 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1e4a4c4897d0f45b1f594bc429284c82efe49188;p=thirdparty%2FPython%2Fcpython.git gh-117657: use relaxed loads for checking dict keys immortality (#118067) Use relaxed load to check if dictkeys are immortal --- diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 58f34c32a87e..c3516dff9737 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -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); diff --git a/Tools/tsan/suppressions_free_threading.txt b/Tools/tsan/suppressions_free_threading.txt index 80191d6c2484..1408103ba80f 100644 --- a/Tools/tsan/suppressions_free_threading.txt +++ b/Tools/tsan/suppressions_free_threading.txt @@ -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