X-Git-Url: https://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=rculfhash.c;fp=rculfhash.c;h=3ad3618aa7297ee5403d176d5c7f0e02be504def;hp=e9cf0622f53576ef8ad8c08eda082c37f1151b86;hb=196f4fab9bf26c48bc318ac2ff985469c4f62c7e;hpb=42e83919d54e7dc45d11b99a957b436403d16b68 diff --git a/rculfhash.c b/rculfhash.c index e9cf062..3ad3618 100644 --- a/rculfhash.c +++ b/rculfhash.c @@ -1073,6 +1073,11 @@ int _cds_lfht_del(struct cds_lfht *ht, unsigned long size, if (caa_unlikely(is_removed(next))) return -ENOENT; assert(!is_bucket(next)); + /* + * The del operation semantic guarantees a full memory barrier + * before the uatomic_or atomic commit of the deletion flag. + */ + cmm_smp_mb__before_uatomic_or(); /* * We set the REMOVED_FLAG unconditionally. Note that there may * be more than one concurrent thread setting this flag.