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.
diff --git a/src/mux_h2.c b/src/mux_h2.c
index faa5d0b..0b28c38 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -4865,6 +4865,18 @@
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;
}