BUG/MEDIUM: lists: Properly handle the case we're removing the first elt.
In LIST_DEL_LOCKED(), initialize p2 to NULL, and only attempt to set it back
to its previous value if we had a previous element, and thus p2 is non-NULL.
diff --git a/include/common/mini-clist.h b/include/common/mini-clist.h
index fa5df87..0822828 100644
--- a/include/common/mini-clist.h
+++ b/include/common/mini-clist.h
@@ -226,7 +226,7 @@
do { \
while (1) { \
struct list *n, *n2; \
- struct list *p, *p2; \
+ struct list *p, *p2 = NULL; \
n = HA_ATOMIC_XCHG(&(el)->n, LLIST_BUSY); \
if (n == LLIST_BUSY) \
continue; \
@@ -248,7 +248,8 @@
if (n != (el)) { \
n2 = HA_ATOMIC_XCHG(&n->p, LLIST_BUSY); \
if (n2 == LLIST_BUSY) { \
- p2->n = (el); \
+ if (p2 != NULL) \
+ p2->n = (el); \
(el)->p = p; \
(el)->n = n; \
__ha_barrier_store(); \