X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=rculfhash.c;h=5264a8ec7fc9747afeccbc544dad3d2b3a80a54a;hb=0adc36a89d4089a653c11a68ea6fb92a2ec7c5aa;hp=0f36899371dc2d0958306023b78ae1c3834e92da;hpb=7801dadd3a4f6ae9e40b2c858e5f97a01897d7dc;p=urcu.git diff --git a/rculfhash.c b/rculfhash.c index 0f36899..5264a8e 100644 --- a/rculfhash.c +++ b/rculfhash.c @@ -119,12 +119,9 @@ * * order bits reverse * 0 0 000 000 - * | - * 1 | 1 001 100 <- <- - * | | | | - * 2 | | 2 010 010 | | + * 1 | 1 001 100 <- + * 2 | | 2 010 010 <- | * | | | 3 011 110 | <- | - * | | | | | | | * 3 -> | | | 4 100 001 | | * -> | | 5 101 101 | * -> | 6 110 011 @@ -945,10 +942,9 @@ int _cds_lfht_del(struct cds_lfht *ht, unsigned long size, { struct cds_lfht_node *dummy, *next, *old; struct _cds_lfht_node *lookup; - int flagged = 0; if (!node) /* Return -ENOENT if asked to delete NULL node */ - goto end; + return -ENOENT; /* logically delete the node */ assert(!is_dummy(node)); @@ -959,7 +955,7 @@ int _cds_lfht_del(struct cds_lfht *ht, unsigned long size, next = old; if (unlikely(is_removed(next))) - goto end; + return -ENOENT; if (dummy_removal) assert(is_dummy(next)); else @@ -967,9 +963,7 @@ int _cds_lfht_del(struct cds_lfht *ht, unsigned long size, new_next = flag_removed(next); old = uatomic_cmpxchg(&node->p.next, next, new_next); } while (old != next); - /* We performed the (logical) deletion. */ - flagged = 1; /* * Ensure that the node is not visible to readers anymore: lookup for @@ -979,17 +973,9 @@ int _cds_lfht_del(struct cds_lfht *ht, unsigned long size, lookup = lookup_bucket(ht, size, bit_reverse_ulong(node->p.reverse_hash)); dummy = (struct cds_lfht_node *) lookup; _cds_lfht_gc_bucket(dummy, node); -end: - /* - * Only the flagging action indicated that we (and no other) - * removed the node from the hash. - */ - if (flagged) { - assert(is_removed(rcu_dereference(node->p.next))); - return 0; - } else { - return -ENOENT; - } + + assert(is_removed(rcu_dereference(node->p.next))); + return 0; } static