MEDIUM: h2: enable reading again on the connection if it was blocked on stream buffer full
If the polling update function is called with RD_ENA while H2_CF_DEM_SFULL
indicates the demux had to block on a stream buffer full condition, we can
remove the flag and re-enable polling for receiving because this is the
indication that a consumer stream has made some room in the buffer. Probably
that we should improve this to ensure that h2s->id == h2c->dsi and avoid
trying to receive multiple times in a row for the wrong stream.
diff --git a/src/mux_h2.c b/src/mux_h2.c
index f05c269..e9f1bc8 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -943,6 +943,14 @@
if (!h2s)
return;
+ /* we may unblock a blocked read */
+
+ if (cs->flags & CS_FL_DATA_RD_ENA &&
+ h2s->h2c->flags & H2_CF_DEM_SFULL && h2s->h2c->dsi == h2s->id) {
+ h2s->h2c->flags &= ~H2_CF_DEM_SFULL;
+ conn_xprt_want_recv(cs->conn);
+ }
+
/* Note: the stream and stream-int code doesn't allow us to perform a
* synchronous send() here unfortunately, because this code is called
* as si_update() from the process_stream() context. This means that