mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-21 13:02:55 +00:00
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.
This commit is contained in:
parent
4f32d03360
commit
dc9ce9c264
@ -628,11 +628,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 */
|
||||
|
Loading…
Reference in New Issue
Block a user