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.
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;
}