summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDino Viehland <dinoviehland@meta.com>2024-04-19 16:25:08 (GMT)
committerGitHub <noreply@github.com>2024-04-19 16:25:08 (GMT)
commit1e4a4c4897d0f45b1f594bc429284c82efe49188 (patch)
treea08b1f2dc5fc1e4f8d5fedb15f8ea30bcdcd84f6
parent8d4a244f1516dcde23becc2a273d30c202237598 (diff)
downloadcpython-1e4a4c4897d0f45b1f594bc429284c82efe49188.zip
cpython-1e4a4c4897d0f45b1f594bc429284c82efe49188.tar.gz
cpython-1e4a4c4897d0f45b1f594bc429284c82efe49188.tar.bz2
gh-117657: use relaxed loads for checking dict keys immortality (#118067)
Use relaxed load to check if dictkeys are immortal
-rw-r--r--Objects/dictobject.c4
-rw-r--r--Tools/tsan/suppressions_free_threading.txt2
2 files changed, 2 insertions, 4 deletions
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 58f34c3..c3516df 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 80191d6..1408103 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