]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUG/MEDIUM: mux-h1: Don't wake h1s if mux is blocked on lack of output buffer
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 1 Feb 2022 17:25:06 +0000 (18:25 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 21 Feb 2022 15:05:47 +0000 (16:05 +0100)
commitc17c31c822dc4a5f3270f6ae4f96afa50fb7390f
treeb200bcf02f80207f696e8a37fa953fda311a6918
parentdc523e3b89d8ff3b73eb7d3218cbf2907c94f6ae
BUG/MEDIUM: mux-h1: Don't wake h1s if mux is blocked on lack of output buffer

After sending some data, we try to wake the H1 stream to resume data
processing at the stream level, except if the output buffer is still
full. However we must also be sure the mux is not blocked because of an
allocation failure on this buffer. Otherwise, it may lead to a ping-pong
loop between the stream and the mux to send more data with an unallocated
output buffer.

Note there is a mechanism to queue buffers allocations when a failure
happens. However this mechanism is totally broken since the filters were
introducted in HAProxy 1.7. And it is worse now with the multiplexers. So
this patch fixes a possible loop needlessly consuming all the CPU. But
buffer allocation failures must remain pretty rare.

This patch must be backported as far as 2.0.
src/mux_h1.c