Fix: hlist iteration relies on undefined behavior
[urcu.git] / include / urcu / rcuhlist.h
index 69c4d3184fd50d7f38a730e17447678f5fec3991..ca1da068b1fa6fdbe95db84dae922fc44e66bf84 100644 (file)
@@ -72,10 +72,10 @@ void cds_hlist_del_rcu(struct cds_hlist_node *elem)
                        entry = cds_hlist_entry(pos, __typeof__(*entry), member))
 
 #define cds_hlist_for_each_entry_rcu_2(entry, head, member) \
-       for (entry = cds_hlist_entry(rcu_dereference((head)->next), \
+       for (entry = cds_hlist_entry_safe(rcu_dereference((head)->next), \
                        __typeof__(*entry), member); \
-               &entry->member != NULL; \
-               entry = cds_hlist_entry(rcu_dereference(entry->member.next), \
+               entry != NULL; \
+               entry = cds_hlist_entry_safe(rcu_dereference(entry->member.next), \
                        __typeof__(*entry), member))
 
 #endif /* _URCU_RCUHLIST_H */
This page took 0.022689 seconds and 4 git commands to generate.