X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=rculfhash.c;h=3ad3618aa7297ee5403d176d5c7f0e02be504def;hp=e9cf0622f53576ef8ad8c08eda082c37f1151b86;hb=3e056c21610d5c0c5591fcb0bc714dfe26bff3a3;hpb=71bb3aca70894bd78ec75f47c0c464261ad1dc86 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.