]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: mux-h2: Don't pretend mux buffers aren't full anymore if nothing sent
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 24 Oct 2019 08:31:01 +0000 (10:31 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Sat, 26 Oct 2019 06:24:45 +0000 (08:24 +0200)
In h2_send(), when something is sent, we remove the flags
(H2_CF_MUX_MFULL|H2_CF_DEM_MROOM) on the h2 connection. This way, we are able to
wake up all streams waiting to send data. Unfortunatly, these flags are
unconditionally removed, even when nothing was sent. So if the h2c is blocked
because the mux buffers are full and we are unable to send anything, all streams
in the send_list are woken up for nothing. Now, we only remove these flags if at
least a send succeeds.

This patch must be backport to 2.0.

src/mux_h2.c

index aeb91668b987b424213ede6730cec423049a72e1..bb0a94de4043247fbdcce7fb8dfd96bb1ebbb5be 100644 (file)
@@ -3488,7 +3488,8 @@ static int h2_send(struct h2c *h2c)
                        offer_buffers(NULL, tasks_run_queue);
 
                /* wrote at least one byte, the buffer is not full anymore */
-               h2c->flags &= ~(H2_CF_MUX_MFULL | H2_CF_DEM_MROOM);
+               if (sent)
+                       h2c->flags &= ~(H2_CF_MUX_MFULL | H2_CF_DEM_MROOM);
        }
 
        if (conn->flags & CO_FL_SOCK_WR_SH) {