From e9d34f991e79dc5b39cb35fdc5b8e7239cb0fd06 Mon Sep 17 00:00:00 2001 From: Olivier Houchard Date: Thu, 20 Nov 2025 13:51:02 +0100 Subject: [PATCH] BUG/MEDIUM: queues: Don't forget to unlock the queue before exiting In assign_server_and_queue(), there's a rare case when the server was full, so we created a pendconn, another server was considered but in the meanwhile the pendconn was unqueued already, so we just left the function. We did so, however, while still holding the queue lock, which will ultimately lead to a deadlock, and ultimately the watchdog would kill the process. To fix that, just unlock the queue before leaving. This should be backported to 3.2. --- src/backend.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend.c b/src/backend.c index cac056efb..0170547b2 100644 --- a/src/backend.c +++ b/src/backend.c @@ -1137,6 +1137,7 @@ int assign_server_and_queue(struct stream *s) HA_SPIN_LOCK(QUEUE_LOCK, &p->queue->lock); if (!p->node.node.leaf_p) { + HA_SPIN_UNLOCK(QUEUE_LOCK, &p->queue->lock); /* * Okay we've been queued and * unqueued already, just leave