projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rcuja fix: list prev pointer vs recompaction
[urcu.git]
/
rcuja
/
rcuja.c
diff --git
a/rcuja/rcuja.c
b/rcuja/rcuja.c
index d24aaad1a87c0727afdfea0382fca951a5f2a520..9c90fdcdfc13b926c983e9be770aa5e51179e784 100644
(file)
--- 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) {
* 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++;
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);
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;
end:
rcuja_shadow_unlock(shadow_node);
return ret;
This page took
0.024406 seconds
and
4
git commands to generate.