From 5160683fc74e8684f8695404f928358fdbc17241 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 17 Oct 2017 15:30:07 +0200 Subject: [PATCH] MEDIUM: h2: wake the connection up for send on pending streams If some streams were blocked on flow control and the connection's window was recently opened, or if some streams are waiting while no block flag remains, we immediately want to try to send again. This can happen if a recv() for a stream wants to send after the send() loop has already been processed. --- src/mux_h2.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/mux_h2.c b/src/mux_h2.c index ed891d6e1..9776deaa3 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -739,8 +739,11 @@ static int h2_wake(struct connection *conn) } /* adjust output polling */ - if ((h2c->st0 == H2_CS_ERROR || h2c->mbuf->o) && - !(conn->flags & CO_FL_SOCK_WR_SH)) { + if (!(conn->flags & CO_FL_SOCK_WR_SH) && + (h2c->st0 == H2_CS_ERROR || + h2c->mbuf->o || + (h2c->mws > 0 && !LIST_ISEMPTY(&h2c->fctl_list)) || + (!(h2c->flags & H2_CF_MUX_BLOCK_ANY) && !LIST_ISEMPTY(&h2c->send_list)))) { /* FIXME: we should (re-)arm a send timeout here */ __conn_xprt_want_send(conn); }