From 7d7b11cf9317acab65ea3a3ae7f24eed1c0fb02a Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 11 Dec 2020 11:07:19 +0100 Subject: [PATCH] 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. --- src/mux_pt.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mux_pt.c b/src/mux_pt.c index b9ad8dc67..3e2d066fd 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); }