]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: mux-h2: check for too many streams only for idle streams
authorWilly Tarreau <w@1wt.eu>
Wed, 2 Jan 2019 12:59:43 +0000 (13:59 +0100)
committerWilly Tarreau <w@1wt.eu>
Thu, 3 Jan 2019 17:45:38 +0000 (18:45 +0100)
The HEADERS frame parser checks if we still have too many streams, but
this should only be done for idle streams, otherwise it would prevent
us from processing trailer frames.

src/mux_h2.c

index 59d76b7c3a8aac09a1c60f2ddaf1ca6d6368f305..416f3ec6912530583c81f45082b4e6d10555fcdc 100644 (file)
@@ -1859,9 +1859,6 @@ static struct h2s *h2c_frt_handle_headers(struct h2c *h2c, struct h2s *h2s)
        if (b_data(&h2c->dbuf) < h2c->dfl && !b_full(&h2c->dbuf))
                return NULL; // incomplete frame
 
-       if (h2c->flags & H2_CF_DEM_TOOMANY)
-               return 0; // too many cs still present
-
        /* now either the frame is complete or the buffer is complete */
        if (h2s->st != H2_SS_IDLE) {
                /* FIXME: stream already exists, this is only allowed for
@@ -1877,6 +1874,8 @@ static struct h2s *h2c_frt_handle_headers(struct h2c *h2c, struct h2s *h2s)
                sess_log(h2c->conn->owner);
                goto conn_err;
        }
+       else if (h2c->flags & H2_CF_DEM_TOOMANY)
+               goto out; // IDLE but too many cs still present
 
        error = h2c_decode_headers(h2c, &rxbuf, &flags);