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.
This commit is contained in:
Willy Tarreau 2017-11-07 11:03:56 +01:00
parent 3eabe9b174
commit 319994a2e9

View File

@ -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)) if (h2c->flags & (H2_CF_MUX_MFULL | H2_CF_DEM_MBUSY | H2_CF_DEM_MROOM))
flags |= CO_SFL_MSG_MORE; 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; break;
/* wrote at least one byte, the buffer is not full anymore */ /* wrote at least one byte, the buffer is not full anymore */