urcu: Add extra "engineering safety factor" memory barrier in update_counter_and_wait()
[urcu.git] / urcu-bp.c
index fc6eedf56a545dde91e1fa8b96456af5bc593158..3af7c3b9712879b3b74481900b5ee615cae7f8e0 100644 (file)
--- a/urcu-bp.c
+++ b/urcu-bp.c
@@ -122,7 +122,7 @@ void update_counter_and_wait(void)
        int wait_loops = 0;
        struct rcu_reader *index, *tmp;
 
-       /* Switch parity: 1 -> 0, 0 -> 1 */
+       /* Switch parity: 0 -> 1, 1 -> 0 */
        STORE_SHARED(rcu_gp_ctr, rcu_gp_ctr ^ RCU_GP_CTR_PHASE);
 
        /*
@@ -300,6 +300,7 @@ static void rcu_gc_registry(void)
                assert(ret != EINVAL);
                if (ret == ESRCH) {
                        list_del(&rcu_reader_reg->head);
+                       rcu_reader_reg->ctr = 0;
                        rcu_reader_reg->alloc = 0;
                        registry_arena.used -= sizeof(struct rcu_reader);
                }
This page took 0.02435 seconds and 4 git commands to generate.