BUG/MEDIUM: mux_h1: Process a new request if we already received it.
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.
diff --git a/src/mux_h1.c b/src/mux_h1.c
index 27b1cb6..c1eefe2 100644
--- a/src/mux_h1.c
+++ b/src/mux_h1.c
@@ -2491,7 +2491,11 @@
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)) {