@@ -184,14 +184,14 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
184184 found_unused_or_dummy :
185185 if (freeslot == NULL )
186186 goto found_unused ;
187- so -> used ++ ;
187+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , so -> used + 1 ) ;
188188 freeslot -> key = key ;
189189 freeslot -> hash = hash ;
190190 return 0 ;
191191
192192 found_unused :
193193 so -> fill ++ ;
194- so -> used ++ ;
194+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , so -> used + 1 ) ;
195195 entry -> key = key ;
196196 entry -> hash = hash ;
197197 if ((size_t )so -> fill * 5 < mask * 3 )
@@ -357,7 +357,7 @@ set_discard_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
357357 old_key = entry -> key ;
358358 entry -> key = dummy ;
359359 entry -> hash = -1 ;
360- so -> used -- ;
360+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , so -> used - 1 ) ;
361361 Py_DECREF (old_key );
362362 return DISCARD_FOUND ;
363363}
@@ -397,7 +397,7 @@ set_empty_to_minsize(PySetObject *so)
397397{
398398 memset (so -> smalltable , 0 , sizeof (so -> smalltable ));
399399 so -> fill = 0 ;
400- so -> used = 0 ;
400+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , 0 ) ;
401401 so -> mask = PySet_MINSIZE - 1 ;
402402 so -> table = so -> smalltable ;
403403 so -> hash = -1 ;
@@ -615,7 +615,7 @@ set_merge_lock_held(PySetObject *so, PyObject *otherset)
615615 }
616616 }
617617 so -> fill = other -> fill ;
618- so -> used = other -> used ;
618+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , other -> used ) ;
619619 return 0 ;
620620 }
621621
@@ -624,7 +624,7 @@ set_merge_lock_held(PySetObject *so, PyObject *otherset)
624624 setentry * newtable = so -> table ;
625625 size_t newmask = (size_t )so -> mask ;
626626 so -> fill = other -> used ;
627- so -> used = other -> used ;
627+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , other -> used ) ;
628628 for (i = other -> mask + 1 ; i > 0 ; i -- , other_entry ++ ) {
629629 key = other_entry -> key ;
630630 if (key != NULL && key != dummy ) {
@@ -678,7 +678,7 @@ set_pop_impl(PySetObject *so)
678678 key = entry -> key ;
679679 entry -> key = dummy ;
680680 entry -> hash = -1 ;
681- so -> used -- ;
681+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , so -> used - 1 ) ;
682682 so -> finger = entry - so -> table + 1 ; /* next place to start */
683683 return key ;
684684}
@@ -1173,7 +1173,9 @@ set_swap_bodies(PySetObject *a, PySetObject *b)
11731173 Py_hash_t h ;
11741174
11751175 t = a -> fill ; a -> fill = b -> fill ; b -> fill = t ;
1176- t = a -> used ; a -> used = b -> used ; b -> used = t ;
1176+ t = a -> used ;
1177+ FT_ATOMIC_STORE_SSIZE_RELAXED (a -> used , b -> used );
1178+ FT_ATOMIC_STORE_SSIZE_RELAXED (b -> used , t );
11771179 t = a -> mask ; a -> mask = b -> mask ; b -> mask = t ;
11781180
11791181 u = a -> table ;
0 commit comments