From: Christopher Faulet Date: Fri, 28 Feb 2025 15:07:00 +0000 (+0100) Subject: BUG/MEDIUM: mux-fcgi: Try to fully fill demux buffer on receive if not empty X-Git-Tag: v3.2-dev7~52 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0e08252294d5a7389ad42b51b4b931fab2e66f31;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: mux-fcgi: Try to fully fill demux buffer on receive if not empty Don't reserve space for the HTX overhead on receive if the demux buffer is not empty. Otherwise, the demux buffer may be erroneously reported as full and this may block records processing. Because of this bug, a ping-pong loop till timeout between data reception and demux process can be observed. This bug was introduced by the commit 5f927f603 ("BUG/MEDIUM: mux-fcgi: Properly handle read0 on partial records"). To fix the issue, if the demux buffer is not empty when we try to receive more data, all free space in the buffer can now be used. However, if the demux buffer is empty, we still try to keep it aligned with the HTX. This patch must be backported to 3.1. --- diff --git a/src/mux_fcgi.c b/src/mux_fcgi.c index 289c85c23..fe46e184e 100644 --- a/src/mux_fcgi.c +++ b/src/mux_fcgi.c @@ -2842,7 +2842,7 @@ static int fcgi_recv(struct fcgi_conn *fconn) buf->head = sizeof(struct htx) - (fconn->state == FCGI_CS_RECORD_H ? FCGI_RECORD_HEADER_SZ : 0); } else - max = buf_room_for_htx_data(buf); + max = b_room(buf); ret = max ? conn->xprt->rcv_buf(conn, conn->xprt_ctx, buf, max, 0) : 0;