mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 14:21:25 +02:00
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.
This commit is contained in:
parent
1d393228e0
commit
d7739c8820
@ -943,6 +943,14 @@ static void h2_update_poll(struct conn_stream *cs)
|
|||||||
if (!h2s)
|
if (!h2s)
|
||||||
return;
|
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
|
/* Note: the stream and stream-int code doesn't allow us to perform a
|
||||||
* synchronous send() here unfortunately, because this code is called
|
* synchronous send() here unfortunately, because this code is called
|
||||||
* as si_update() from the process_stream() context. This means that
|
* as si_update() from the process_stream() context. This means that
|
||||||
|
Loading…
x
Reference in New Issue
Block a user