]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: stream-int: Don't wait to send truncated HTTP messages
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 25 Jun 2020 14:11:20 +0000 (16:11 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Thu, 25 Jun 2020 19:50:20 +0000 (21:50 +0200)
In HTX, since the commit 8945bb6c0 ("BUG/MEDIUM: stream-int: fix loss of
CO_SFL_MSG_MORE flag in forwarding"), the CO_SFL_MSG_MORE flag is set on the
transport layer if the end of the HTTP message is not reached, to delay the data
forwarding. To do so, the CF_EOI flag is tested and must not be set on the
output channel.

But the CO_SFL_MSG_MORE flag is also added if the message was truncated. Only
CF_SHUTR is set if this case. So the forwarding may be delayed to wait more data
that will never come. So, in HTX, the CO_SFL_MSG_MORE flag must not be set if
the message is finished (full or truncated).

No backport is needed.

src/stream_interface.c

index 8b847034064bfae9e70b7344c436c2ac6fd817a6..314e628015aae93a5b7131471fb7b92a34f47a14 100644 (file)
@@ -698,7 +698,7 @@ int si_cs_send(struct conn_stream *cs)
                if ((!(oc->flags & (CF_NEVER_WAIT|CF_SEND_DONTWAIT)) &&
                     ((oc->to_forward && oc->to_forward != CHN_INFINITE_FORWARD) ||
                      (oc->flags & CF_EXPECT_MORE) ||
-                     (IS_HTX_STRM(si_strm(si)) && !(oc->flags & CF_EOI)))) ||
+                     (IS_HTX_STRM(si_strm(si)) && !(oc->flags & (CF_EOI|CF_SHUTR))))) ||
                    ((oc->flags & CF_ISRESP) &&
                     ((oc->flags & (CF_AUTO_CLOSE|CF_SHUTW_NOW)) == (CF_AUTO_CLOSE|CF_SHUTW_NOW))))
                        send_flag |= CO_SFL_MSG_MORE;