From: Willy Tarreau Date: Tue, 7 Nov 2017 10:03:56 +0000 (+0100) Subject: BUG/MEDIUM: h2: don't try (and fail) to send non-existing data in the mux X-Git-Tag: v1.8-rc3~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=319994a2e9e47985a8c1e9f589c579fc685b89cc;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: h2: don't try (and fail) to send non-existing data in the mux The call to xprt->snd_buf() was not conditionned on the presence of data in the buffer, resulting in snd_buf() returning 0 and never disabling the polling. It was revealed by the previous bug on error processing but must properly be handled. --- diff --git a/src/mux_h2.c b/src/mux_h2.c index aea1f98d8b..789f8eaeb3 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -1987,7 +1987,7 @@ static void h2_send(struct connection *conn) if (h2c->flags & (H2_CF_MUX_MFULL | H2_CF_DEM_MBUSY | H2_CF_DEM_MROOM)) flags |= CO_SFL_MSG_MORE; - if (conn->xprt->snd_buf(conn, h2c->mbuf, flags) <= 0) + if (h2c->mbuf->o && conn->xprt->snd_buf(conn, h2c->mbuf, flags) <= 0) break; /* wrote at least one byte, the buffer is not full anymore */