]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: mux_h1: Process a new request if we already received it.
authorOlivier Houchard <cognet@ci0.org>
Wed, 25 Mar 2020 11:24:11 +0000 (12:24 +0100)
committerOlivier Houchard <cognet@ci0.org>
Wed, 25 Mar 2020 11:38:40 +0000 (12:38 +0100)
In h1_detach(), if our input buffer isn't empty, don't just subscribe(), we
may hold a new request, and there's nothing left to read. Instead, call
h1_process() directly, so that a new stream is created.
Failure to do so means if we received the new request to early, the
connecetion will just hang, as it happens when using svn.

src/mux_h1.c

index 27b1cb674bf809b965c55ed9a64c80fe127ae471..c1eefe2b8c0aa30aab38e45e372a7ce54c713852 100644 (file)
@@ -2491,7 +2491,11 @@ static void h1_detach(struct conn_stream *cs)
                h1_release(h1c);
        }
        else {
-               h1c->conn->xprt->subscribe(h1c->conn, h1c->conn->xprt_ctx, SUB_RETRY_RECV, &h1c->wait_event);
+               /* If we have a new request, process it immediately */
+               if (unlikely(b_data(&h1c->conn)))
+                       h1_process(h1c);
+               else
+                       h1c->conn->xprt->subscribe(h1c->conn, h1c->conn->xprt_ctx, SUB_RETRY_RECV, &h1c->wait_event);
                if (h1c->task) {
                        h1c->task->expire = TICK_ETERNITY;
                        if (b_data(&h1c->obuf)) {