BUG/MINOR: mux-h2: do not report available outgoing streams after GOAWAY
The calculation of available outgoing H2 streams was improved by commit
d64a3ebe6 ("BUG/MINOR: mux-h2: always check the stream ID limit in
h2_avail_streams()"), but it still is incorrect because RFC7540#6.8
specifically forbids the creation of new streams after a GOAWAY frame
was received. Thus we must not mark the connection as available anymore
in order to be able to handle a graceful shutdown.
This needs to be backported to 1.9.
diff --git a/src/mux_h2.c b/src/mux_h2.c
index 2972ca2..90895e2 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -415,6 +415,12 @@
struct h2c *h2c = conn->ctx;
int ret1, ret2;
+ /* RFC7540#6.8: Receivers of a GOAWAY frame MUST NOT open additional
+ * streams on the connection.
+ */
+ if (h2c->last_sid >= 0)
+ return 0;
+
/* XXX Should use the negociated max concurrent stream nb instead of the conf value */
ret1 = h2_settings_max_concurrent_streams - h2c->nb_streams;