In h2_recv(), return 1 if we have data available, or if h2_recv_allowed()
failed, to be sure h2_process() is called.
Also don't subscribe if our buffer is full.
size_t ret;
if (h2c->wait_event.wait_reason & SUB_CAN_RECV)
- return 0;
+ return (b_data(&h2c->dbuf));
if (!h2_recv_allowed(h2c))
- return 0;
+ return 1;
buf = h2_get_buf(h2c, &h2c->dbuf);
if (!buf) {
ret = 0;
} while (ret > 0);
- if (h2_recv_allowed(h2c)) {
+ if (h2_recv_allowed(h2c) && (b_data(buf) < buf->size)) {
conn_xprt_want_recv(conn);
conn->xprt->subscribe(conn, SUB_CAN_RECV, &h2c->wait_event);
}
+
if (!b_data(buf)) {
h2_release_buf(h2c, &h2c->dbuf);
return 0;