diff --git a/include/haproxy/list.h b/include/haproxy/list.h index 6db2f9269..40929c4f8 100644 --- a/include/haproxy/list.h +++ b/include/haproxy/list.h @@ -300,24 +300,11 @@ __ha_barrier_store(); \ continue; \ } \ - n2 = _HA_ATOMIC_XCHG(&el->next, MT_LIST_BUSY); \ - if (n2 != el) { /* element already linked */ \ - if (n2 != MT_LIST_BUSY) \ - el->next = n2; \ - p->next = n; \ - __ha_barrier_store(); \ - lh->prev = p; \ - __ha_barrier_store(); \ - if (n2 == MT_LIST_BUSY) \ - continue; \ - break; \ - } \ p2 = _HA_ATOMIC_XCHG(&el->prev, MT_LIST_BUSY); \ if (p2 != el) { \ if (p2 != MT_LIST_BUSY) \ el->prev = p2; \ p->next = n; \ - el->next = el; \ __ha_barrier_store(); \ lh->prev = p; \ __ha_barrier_store(); \ @@ -325,6 +312,19 @@ continue; \ break; \ } \ + n2 = _HA_ATOMIC_XCHG(&el->next, MT_LIST_BUSY); \ + if (n2 != el) { /* element already linked */ \ + if (n2 != MT_LIST_BUSY) \ + el->next = n2; \ + p->next = n; \ + el->prev = el; \ + __ha_barrier_store(); \ + lh->prev = p; \ + __ha_barrier_store(); \ + if (n2 == MT_LIST_BUSY) \ + continue; \ + break; \ + } \ (el)->next = n; \ (el)->prev = p; \ __ha_barrier_store(); \