Skip to content

Commit 157cd60

Browse files
committed
Re-order some atomic store operations.
1 parent 7df8f02 commit 157cd60

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

Objects/setobject.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -278,15 +278,15 @@ set_add_entry_takeref(PySetObject *so, PyObject *key, Py_hash_t hash)
278278
if (freeslot == NULL)
279279
goto found_unused;
280280
FT_ATOMIC_STORE_SSIZE_RELAXED(so->used, so->used + 1);
281-
FT_ATOMIC_STORE_PTR_RELEASE(freeslot->key, key);
282281
FT_ATOMIC_STORE_SSIZE_RELAXED(freeslot->hash, hash);
282+
FT_ATOMIC_STORE_PTR_RELEASE(freeslot->key, key);
283283
return 0;
284284

285285
found_unused:
286286
so->fill++;
287287
FT_ATOMIC_STORE_SSIZE_RELAXED(so->used, so->used + 1);
288-
FT_ATOMIC_STORE_PTR_RELEASE(entry->key, key);
289288
FT_ATOMIC_STORE_SSIZE_RELAXED(entry->hash, hash);
289+
FT_ATOMIC_STORE_PTR_RELEASE(entry->key, key);
290290
if ((size_t)so->fill*5 < mask*3)
291291
return 0;
292292
return set_table_resize(so, so->used>50000 ? so->used*2 : so->used*4);
@@ -352,8 +352,8 @@ set_insert_clean(setentry *table, size_t mask, PyObject *key, Py_hash_t hash)
352352
i = (i * 5 + 1 + perturb) & mask;
353353
}
354354
found_null:
355-
FT_ATOMIC_STORE_PTR_RELEASE(entry->key, key);
356355
FT_ATOMIC_STORE_SSIZE_RELAXED(entry->hash, hash);
356+
FT_ATOMIC_STORE_PTR_RELEASE(entry->key, key);
357357
}
358358

359359
/* ======== End logic for probing the hash table ========================== */
@@ -522,9 +522,9 @@ set_discard_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
522522
}
523523
assert(status == SET_LOOKKEY_FOUND);
524524
old_key = entry->key;
525-
FT_ATOMIC_STORE_PTR_RELEASE(entry->key, dummy);
526525
FT_ATOMIC_STORE_SSIZE_RELAXED(entry->hash, -1);
527526
FT_ATOMIC_STORE_SSIZE_RELAXED(so->used, so->used - 1);
527+
FT_ATOMIC_STORE_PTR_RELEASE(entry->key, dummy);
528528
Py_DECREF(old_key);
529529
return DISCARD_FOUND;
530530
}
@@ -790,8 +790,8 @@ set_merge_lock_held(PySetObject *so, PyObject *otherset)
790790
key = other_entry->key;
791791
if (key != NULL) {
792792
assert(so_entry->key == NULL);
793-
FT_ATOMIC_STORE_PTR_RELEASE(so_entry->key, Py_NewRef(key));
794793
FT_ATOMIC_STORE_SSIZE_RELAXED(so_entry->hash, other_entry->hash);
794+
FT_ATOMIC_STORE_PTR_RELEASE(so_entry->key, Py_NewRef(key));
795795
}
796796
}
797797
so->fill = other->fill;
@@ -855,10 +855,10 @@ set_pop_impl(PySetObject *so)
855855
if (entry > limit)
856856
entry = so->table;
857857
}
858-
key = entry->key;
859-
FT_ATOMIC_STORE_PTR_RELEASE(entry->key, dummy);
860858
FT_ATOMIC_STORE_SSIZE_RELAXED(entry->hash, -1);
861859
FT_ATOMIC_STORE_SSIZE_RELAXED(so->used, so->used - 1);
860+
key = entry->key;
861+
FT_ATOMIC_STORE_PTR_RELEASE(entry->key, dummy);
862862
so->finger = entry - so->table + 1; /* next place to start */
863863
return key;
864864
}

0 commit comments

Comments
 (0)