From: Christopher Faulet Date: Thu, 13 Apr 2023 13:13:12 +0000 (+0200) Subject: MINOR: channel: Forwad close to other side on abort X-Git-Tag: v2.8-dev8~157 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3db538ac2f6e2ad2dfa95afd691027e4be22e80c;p=thirdparty%2Fhaproxy.git MINOR: channel: Forwad close to other side on abort Most of calls to channel_abort() are associated to a call to channel_auto_close(). Others are in areas where the auto close is the default. So, it is now systematically enabled when an abort is performed on a channel, as part of channel_abort() function. --- diff --git a/include/haproxy/channel.h b/include/haproxy/channel.h index 1bf21c7a74..44728bbf6b 100644 --- a/include/haproxy/channel.h +++ b/include/haproxy/channel.h @@ -565,6 +565,7 @@ static inline void channel_abort(struct channel *chn) { chn_prod(chn)->flags |= SC_FL_SHUTR_NOW; chn_cons(chn)->flags |= SC_FL_SHUTW_NOW; + chn->flags |= CF_AUTO_CLOSE; chn->flags &= ~CF_AUTO_CONNECT; } diff --git a/src/hlua.c b/src/hlua.c index 6bbf5c97ab..913b237c90 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -8158,7 +8158,6 @@ __LJMP static int hlua_txn_done(lua_State *L) channel_auto_read(req); channel_abort(req); - channel_auto_close(req); channel_erase(req); channel_auto_read(res); diff --git a/src/http_ana.c b/src/http_ana.c index bee658f86d..4dc1b523f7 100644 --- a/src/http_ana.c +++ b/src/http_ana.c @@ -4446,7 +4446,6 @@ int http_forward_proxy_resp(struct stream *s, int final) channel_auto_read(req); channel_abort(req); - channel_auto_close(req); channel_htx_erase(req, htxbuf(&req->buf)); channel_auto_read(res); @@ -4511,7 +4510,6 @@ end: channel_auto_read(&s->req); channel_abort(&s->req); - channel_auto_close(&s->req); channel_htx_erase(&s->req, htxbuf(&s->req.buf)); channel_auto_read(&s->res); channel_auto_close(&s->res); diff --git a/src/stream.c b/src/stream.c index f8fc06203b..5afef6c8f9 100644 --- a/src/stream.c +++ b/src/stream.c @@ -846,7 +846,6 @@ void stream_retnclose(struct stream *s, const struct buffer *msg) channel_auto_read(ic); channel_abort(ic); - channel_auto_close(ic); channel_erase(ic); channel_truncate(oc);