]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: h2: Make sure to return 1 in h2_recv() when needed.
authorOlivier Houchard <ohouchard@haproxy.com>
Fri, 19 Oct 2018 15:26:49 +0000 (17:26 +0200)
committerWilly Tarreau <w@1wt.eu>
Sun, 21 Oct 2018 03:58:33 +0000 (05:58 +0200)
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.

src/mux_h2.c

index ae885d9337a8e84ccdd9a986e1ff57f505659577..f7999d27966169920805bc85799e75dc2e6a0a62 100644 (file)
@@ -2236,10 +2236,10 @@ static int h2_recv(struct h2c *h2c)
        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) {
@@ -2255,10 +2255,11 @@ static int h2_recv(struct h2c *h2c)
                        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;