Some stream parsing errors that do not affect the connection result in
the parsed block not being transferred from the rx buffer to the channel
and not being reported upstream in rcv_buf(), causing the stconn to time
out. Let's detect this condition, and propagate term flags anyway since
no more progress will be made otherwise.
This should be backported at least till 3.2, probably even 2.8.
/* tell the stream layer whether there are data left or not */
if (h2s_rxbuf_cnt(h2s)) {
+ /* Note that parsing errors can also arrive here, we may need
+ * to propagate errors upstream otherwise no new activity will
+ * unblock them.
+ */
se_fl_set(h2s->sd, SE_FL_RCV_MORE | SE_FL_WANT_ROOM);
+ if (h2s_htx && h2s_htx->flags & HTX_FL_PARSING_ERROR)
+ h2s_propagate_term_flags(h2c, h2s);
BUG_ON_HOT(!buf->data);
}
else {