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.
This commit is contained in:
parent
fde287cc76
commit
6dea2ee939
12
src/mux_h2.c
12
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);
|
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;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user