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.
This commit is contained in:
Olivier Houchard 2020-03-25 12:24:11 +01:00
parent 3e128fe973
commit 69664419d2

View File

@ -2491,7 +2491,11 @@ static void h1_detach(struct conn_stream *cs)
h1_release(h1c); h1_release(h1c);
} }
else { 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) { if (h1c->task) {
h1c->task->expire = TICK_ETERNITY; h1c->task->expire = TICK_ETERNITY;
if (b_data(&h1c->obuf)) { if (b_data(&h1c->obuf)) {