]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: mux-h2/htx: Respect the channel's reserve
authorChristopher Faulet <cfaulet@haproxy.com>
Mon, 21 Jan 2019 10:49:37 +0000 (11:49 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 23 Jan 2019 10:27:34 +0000 (11:27 +0100)
When data are pushed in the channel's buffer, in h2_rcv_buf(), the mux-h2 must
respect the reserve if the flag CO_RFL_KEEP_RSV is set. In HTX, because the
stream-interface always sees the buffer as full, there is no other way to know
the reserve must be respected.

This patch must be backported to 1.9.

src/mux_h2.c

index 20ff9882188bdd08b363f6dfbfd5b90eb4d80bd4..acc38e8e2935b05aeeca2e0b6cd1672358b368d6 100644 (file)
@@ -5051,7 +5051,12 @@ static size_t h2_rcv_buf(struct conn_stream *cs, struct buffer *buf, size_t coun
                }
 
                buf_htx = htx_from_buf(buf);
-               count = htx_free_space(buf_htx);
+               count = htx_free_data_space(buf_htx);
+               if (flags & CO_RFL_KEEP_RSV) {
+                       if (count <= global.tune.maxrewrite)
+                               goto end;
+                       count -= global.tune.maxrewrite;
+               }
 
                htx_ret = htx_xfer_blks(buf_htx, h2s_htx, count, HTX_BLK_EOM);