BUG/MEDIUM: leastconn: Unlock the write lock on allocation failure

When we fail to allocate a new tree element, we're still holding the
write lock, so we should do an write unlock, not a read unlock, or the
lock will get corrupted and most likely this will end in a deadlock.

This should be backported up to 3.2.
This commit is contained in:
Olivier Houchard 2026-06-01 15:52:21 +02:00 committed by Olivier Houchard
parent 4a540a4fb7
commit c0aa9f01f1

View file

@ -437,7 +437,7 @@ static void fwlc_srv_reposition(struct server *s)
tree_elt = fwlc_alloc_tree_elt(s->proxy, allocated_elt);
if (tree_elt == NULL) {
/* We failed to allocate memory, just try again later */
HA_RWLOCK_RDUNLOCK(LBPRM_LOCK, &s->proxy->lbprm.lock);
HA_RWLOCK_WRUNLOCK(LBPRM_LOCK, &s->proxy->lbprm.lock);
_HA_ATOMIC_STORE(&s->lb_lock, 0);
if (s->requeue_tasklet)
tasklet_wakeup(s->requeue_tasklet);