urcu-ht: fix steal stolen flag, only in first pass.
authorMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Wed, 30 Sep 2009 14:08:29 +0000 (10:08 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Wed, 30 Sep 2009 14:08:29 +0000 (10:08 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
urcu-ht.c

index 500b8d36fff51dffaa3d2b8548b70f83be60518e..183fcb17d49a43da9eefddb3751ea0f4888bec8f 100644 (file)
--- a/urcu-ht.c
+++ b/urcu-ht.c
@@ -174,9 +174,14 @@ retry:
                node = rcu_dereference(*prev);
        }
 
-       /* Another concurrent thread stole it ? If so, let it deal with this. */
-       if (cmpxchg(&node->stolen, 0, 1) != 0)
-               goto error;
+       if (!del_node) {
+               /*
+                * Another concurrent thread stole it ? If so, let it deal with
+                * this.
+                */
+               if (cmpxchg(&node->stolen, 0, 1) != 0)
+                       goto error;
+       }
 
        /* Found it ! pointer to object is in "prev" */
        if (rcu_cmpxchg_pointer(prev, node, node->next) == node)
This page took 0.025204 seconds and 4 git commands to generate.