51 lines
1.8 KiB
Diff
51 lines
1.8 KiB
Diff
From f0c756518e9bfabfb317d22aa3416bc84eb543ba Mon Sep 17 00:00:00 2001
|
|
From: Olivier Houchard <ohouchard@haproxy.com>
|
|
Date: Fri, 13 Dec 2024 17:11:05 +0000
|
|
Subject: [PATCH] BUG/MEDIUM: queues: Make sure we call process_srv_queue()
|
|
when leaving
|
|
|
|
In stream_free(), make sure we call process_srv_queue() each time we
|
|
call sess_change_server(), otherwise a server may end up not dequeuing
|
|
any stream when it could do so. In some extreme cases it could lead to
|
|
an infinite loop, as the server would appear to be available, as its
|
|
"served" parameter would be < maxconn, but would end up not being used,
|
|
as there are elements still in its queue.
|
|
|
|
This should be backported up to 2.6.
|
|
|
|
(cherry picked from commit dc9ce9c26469e00ab71fe6387dbd13010d4930f0)
|
|
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
|
|
(cherry picked from commit 1385e4ca16b3797b0091a959b626935cd7f29b38)
|
|
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
|
|
(cherry picked from commit 2de073ef00ee7d87aa82064dd2977645ec694730)
|
|
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
|
|
|
|
Conflict:NA
|
|
Reference:https://git.haproxy.org/?p=haproxy-2.9.git;a=patch;h=f0c756518e9bfabfb317d22aa3416bc84eb543ba
|
|
---
|
|
src/stream.c | 3 +++
|
|
1 file changed, 3 insertions(+)
|
|
|
|
diff --git a/src/stream.c b/src/stream.c
|
|
index f4a3298..c42cf95 100644
|
|
--- a/src/stream.c
|
|
+++ b/src/stream.c
|
|
@@ -625,11 +625,14 @@ void stream_free(struct stream *s)
|
|
}
|
|
|
|
if (unlikely(s->srv_conn)) {
|
|
+ struct server *oldsrv = s->srv_conn;
|
|
/* the stream still has a reserved slot on a server, but
|
|
* it should normally be only the same as the one above,
|
|
* so this should not happen in fact.
|
|
*/
|
|
sess_change_server(s, NULL);
|
|
+ if (may_dequeue_tasks(oldsrv, s->be))
|
|
+ process_srv_queue(oldsrv);
|
|
}
|
|
|
|
/* We may still be present in the buffer wait queue */
|
|
--
|
|
1.7.10.4
|
|
|