From 6dea2ee93983ae1530f8202d5bb60e41c85fab2c Mon Sep 17 00:00:00 2001 From: Olivier Houchard Date: Wed, 19 Dec 2018 18:16:17 +0100 Subject: [PATCH] BUG/MEDIUM: h2: Don't wait for flow control if the connection had a shutr. In h2_snd_buf(), if we couldn't send the data because of flow control, and the connection got a shutr, then add CS_FL_ERROR (or CS_FL_ERR_PENDING). We will never get any window update, so we will never be unlocked, anyway. No backport is needed. --- src/mux_h2.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/mux_h2.c b/src/mux_h2.c index faa5d0bcc..0b28c38c9 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -4865,6 +4865,18 @@ static size_t h2_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t coun tasklet_wakeup(h2s->h2c->wait_event.task); } + /* If we're waiting for flow control, and we got a shutr on the + * connection, we will never be unlocked, so add an error on + * the conn_stream. + */ + if (conn_xprt_read0_pending(h2s->h2c->conn) && + !b_data(&h2s->h2c->dbuf) && + (h2s->flags & (H2_SF_BLK_SFCTL | H2_SF_BLK_MFCTL))) { + if (cs->flags & CS_FL_EOS) + cs->flags |= CS_FL_ERROR; + else + cs->flags |= CS_FL_ERR_PENDING; + } return total; }