diff --git a/src/mux_h2.c b/src/mux_h2.c index 35767b185..950dc9e73 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -3631,17 +3631,17 @@ static int h2_recv(struct h2c *h2c) ret = max ? conn->xprt->rcv_buf(conn, conn->xprt_ctx, buf, max, 0) : 0; - if (max && !ret) { - if (conn_xprt_read0_pending(h2c->conn)) { - TRACE_DATA("received read0", H2_EV_H2C_RECV, h2c->conn); - h2c->flags |= H2_CF_RCVD_SHUT; - } else if (h2_recv_allowed(h2c)) { - TRACE_DATA("failed to receive data, subscribing", H2_EV_H2C_RECV, h2c->conn); - conn->xprt->subscribe(conn, conn->xprt_ctx, SUB_RETRY_RECV, &h2c->wait_event); - } + if (max && !ret && h2_recv_allowed(h2c)) { + TRACE_DATA("failed to receive data, subscribing", H2_EV_H2C_RECV, h2c->conn); + conn->xprt->subscribe(conn, conn->xprt_ctx, SUB_RETRY_RECV, &h2c->wait_event); } else if (ret) TRACE_DATA("received data", H2_EV_H2C_RECV, h2c->conn, 0, 0, (void*)(long)ret); + if (conn_xprt_read0_pending(h2c->conn)) { + TRACE_DATA("received read0", H2_EV_H2C_RECV, h2c->conn); + h2c->flags |= H2_CF_RCVD_SHUT; + } + if (!b_data(buf)) { h2_release_buf(h2c, &h2c->dbuf); TRACE_LEAVE(H2_EV_H2C_RECV, h2c->conn);