If some streams were blocked on flow control and the connection's
window was recently opened, or if some streams are waiting while
no block flag remains, we immediately want to try to send again.
This can happen if a recv() for a stream wants to send after the
send() loop has already been processed.
}
/* adjust output polling */
- if ((h2c->st0 == H2_CS_ERROR || h2c->mbuf->o) &&
- !(conn->flags & CO_FL_SOCK_WR_SH)) {
+ if (!(conn->flags & CO_FL_SOCK_WR_SH) &&
+ (h2c->st0 == H2_CS_ERROR ||
+ h2c->mbuf->o ||
+ (h2c->mws > 0 && !LIST_ISEMPTY(&h2c->fctl_list)) ||
+ (!(h2c->flags & H2_CF_MUX_BLOCK_ANY) && !LIST_ISEMPTY(&h2c->send_list)))) {
/* FIXME: we should (re-)arm a send timeout here */
__conn_xprt_want_send(conn);
}