rcuja fix: list prev pointer vs recompaction
[urcu.git] / rcuja / rcuja.c
index d24aaad1a87c0727afdfea0382fca951a5f2a520..9c90fdcdfc13b926c983e9be770aa5e51179e784 100644 (file)
@@ -1419,6 +1419,10 @@ int ja_unchain_node(struct cds_ja *ja,
         * list (while holding lock).
         */
        cds_hlist_for_each_rcu(hlist_node, &hlist_head) {
+               if (count == 0) {
+                       /* FIXME: currently a work-around */
+                       hlist_node->prev = (struct cds_hlist_node *) node_flag_ptr;
+               }
                count++;
                if (hlist_node == &node->list)
                        found++;
@@ -1429,6 +1433,10 @@ int ja_unchain_node(struct cds_ja *ja,
                goto end;
        }
        cds_hlist_del_rcu(&node->list);
+       /*
+        * Validate that we indeed removed the node from linked list.
+        */
+       assert(ja_node_ptr(*node_flag_ptr) != (struct cds_ja_inode *) node);
 end:
        rcuja_shadow_unlock(shadow_node);
        return ret;
This page took 0.022526 seconds and 4 git commands to generate.