@@ -184,14 +184,14 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
184
184
found_unused_or_dummy :
185
185
if (freeslot == NULL )
186
186
goto found_unused ;
187
- so -> used ++ ;
187
+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , so -> used + 1 ) ;
188
188
freeslot -> key = key ;
189
189
freeslot -> hash = hash ;
190
190
return 0 ;
191
191
192
192
found_unused :
193
193
so -> fill ++ ;
194
- so -> used ++ ;
194
+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , so -> used + 1 ) ;
195
195
entry -> key = key ;
196
196
entry -> hash = hash ;
197
197
if ((size_t )so -> fill * 5 < mask * 3 )
@@ -357,7 +357,7 @@ set_discard_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
357
357
old_key = entry -> key ;
358
358
entry -> key = dummy ;
359
359
entry -> hash = -1 ;
360
- so -> used -- ;
360
+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , so -> used - 1 ) ;
361
361
Py_DECREF (old_key );
362
362
return DISCARD_FOUND ;
363
363
}
@@ -397,7 +397,7 @@ set_empty_to_minsize(PySetObject *so)
397
397
{
398
398
memset (so -> smalltable , 0 , sizeof (so -> smalltable ));
399
399
so -> fill = 0 ;
400
- so -> used = 0 ;
400
+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , 0 ) ;
401
401
so -> mask = PySet_MINSIZE - 1 ;
402
402
so -> table = so -> smalltable ;
403
403
so -> hash = -1 ;
@@ -615,7 +615,7 @@ set_merge_lock_held(PySetObject *so, PyObject *otherset)
615
615
}
616
616
}
617
617
so -> fill = other -> fill ;
618
- so -> used = other -> used ;
618
+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , other -> used ) ;
619
619
return 0 ;
620
620
}
621
621
@@ -624,7 +624,7 @@ set_merge_lock_held(PySetObject *so, PyObject *otherset)
624
624
setentry * newtable = so -> table ;
625
625
size_t newmask = (size_t )so -> mask ;
626
626
so -> fill = other -> used ;
627
- so -> used = other -> used ;
627
+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , other -> used ) ;
628
628
for (i = other -> mask + 1 ; i > 0 ; i -- , other_entry ++ ) {
629
629
key = other_entry -> key ;
630
630
if (key != NULL && key != dummy ) {
@@ -678,7 +678,7 @@ set_pop_impl(PySetObject *so)
678
678
key = entry -> key ;
679
679
entry -> key = dummy ;
680
680
entry -> hash = -1 ;
681
- so -> used -- ;
681
+ FT_ATOMIC_STORE_SSIZE_RELAXED ( so -> used , so -> used - 1 ) ;
682
682
so -> finger = entry - so -> table + 1 ; /* next place to start */
683
683
return key ;
684
684
}
@@ -1173,7 +1173,9 @@ set_swap_bodies(PySetObject *a, PySetObject *b)
1173
1173
Py_hash_t h ;
1174
1174
1175
1175
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 );
1177
1179
t = a -> mask ; a -> mask = b -> mask ; b -> mask = t ;
1178
1180
1179
1181
u = a -> table ;
0 commit comments