rculfhash: add missing clear flag in gc
[urcu.git] / rculfhash.c
index 55f56ceb6bc54a248032d3e2ce94e2db1bfeb82b..0c433e54050ea0ba311b91114f6c58b26222629e 100644 (file)
 #define max(a, b)      ((a) > (b) ? (a) : (b))
 #endif
 
+/*
+ * The removed flag needs to be updated atomically with the pointer.
+ * The dummy flag does not require to be updated atomically with the
+ * pointer, but it is added as a pointer low bit flag to save space.
+ */
 #define REMOVED_FLAG           (1UL << 0)
 #define DUMMY_FLAG             (1UL << 1)
 #define FLAGS_MASK             ((1UL << 2) - 1)
@@ -242,7 +247,7 @@ void _ht_gc_bucket(struct rcu_ht_node *dummy, struct rcu_ht_node *node)
                        next = rcu_dereference(clear_flag(iter)->p.next);
                        if (is_removed(next))
                                break;
-                       iter_prev = iter;
+                       iter_prev = clear_flag(iter);
                        iter = next;
                }
                assert(!is_removed(iter));
This page took 0.023069 seconds and 4 git commands to generate.