From: Willy Tarreau Date: Fri, 11 Dec 2020 10:07:19 +0000 (+0100) Subject: MINOR: mux-pt: take care of CS_SHR_DRAIN in shutr() X-Git-Tag: v2.4-dev3~28 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7d7b11cf9317acab65ea3a3ae7f24eed1c0fb02a;p=thirdparty%2Fhaproxy.git MINOR: mux-pt: take care of CS_SHR_DRAIN in shutr() When the shutr() requests CS_SHR_DRAIN and there's no particular shutr implemented on the underlying transport layer, we must drain pending data. This is what happens when cs_drain_and_close() is called. It is important for TCP checks to drain large responses and close cleanly. --- diff --git a/src/mux_pt.c b/src/mux_pt.c index b9ad8dc67f..3e2d066fd5 100644 --- a/src/mux_pt.c +++ b/src/mux_pt.c @@ -247,6 +247,8 @@ static void mux_pt_shutr(struct conn_stream *cs, enum cs_shr_mode mode) if (conn_xprt_ready(cs->conn) && cs->conn->xprt->shutr) cs->conn->xprt->shutr(cs->conn, cs->conn->xprt_ctx, (mode == CS_SHR_DRAIN)); + else if (mode == CS_SHR_DRAIN) + conn_sock_drain(cs->conn); if (cs->flags & CS_FL_SHW) conn_full_close(cs->conn); }