X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=rcuja%2Frcuja.c;h=9c90fdcdfc13b926c983e9be770aa5e51179e784;hb=ade342cbaeff2436d44eb17899765cb64a1271ca;hp=d24aaad1a87c0727afdfea0382fca951a5f2a520;hpb=b62a8d0cdd624633182311ceabb532cd42088813;p=urcu.git diff --git a/rcuja/rcuja.c b/rcuja/rcuja.c index d24aaad..9c90fdc 100644 --- a/rcuja/rcuja.c +++ b/rcuja/rcuja.c @@ -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;