qsbr urcu: make it safe to call rcu_sychronize from a registered thread.
authorPierre Habouzit <madcoder@debian.org>
Tue, 15 Sep 2009 20:17:22 +0000 (16:17 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Tue, 15 Sep 2009 20:17:22 +0000 (16:17 -0400)
Else, since calling rcu_sychronize will increment urcu_gp_ctr, we will be
stupidly waiting for ourselves and deadlock.

No need to use _rcu_quiescent_state() since we are currently owning the
internal URCU lock, so the memory barriers and ACCESS_ONCE() are overkill.

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
urcu-qsbr.c

index 14733ab21e1b61d10bf93ecc082967cdf9d717cd..c0f055441930ab8718cd4d4347325bd6671dc2fc 100644 (file)
@@ -114,6 +114,9 @@ static void wait_for_quiescent_state(void)
 {
        struct reader_registry *index;
 
+        if (rcu_reader_qs_gp & 1)
+            rcu_reader_qs_gp = urcu_gp_ctr + 1;
+
        if (!registry)
                return;
        /*
This page took 0.025421 seconds and 4 git commands to generate.