From: Christopher Faulet Date: Thu, 14 Apr 2022 09:08:26 +0000 (+0200) Subject: MINOR: muxes: Don't expect to have a mux without connection in destroy callback X-Git-Tag: v2.6-dev6~24 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7c452ccbff8261ead35c1bd8c932a8d4e4a3e451;p=thirdparty%2Fhaproxy.git MINOR: muxes: Don't expect to have a mux without connection in destroy callback Once a mux initialized, the underlying connection alwaus exists from its point of view and it is never removed until the mux is released. It may be owned by another mux during an upgrade. But the pointer remains set. Thus there is no reason to test it in the destroy callback function. This patch should fix the issue #1652. --- diff --git a/src/mux_fcgi.c b/src/mux_fcgi.c index 56a9a0bd01..cdb118c3a1 100644 --- a/src/mux_fcgi.c +++ b/src/mux_fcgi.c @@ -3576,7 +3576,7 @@ static void fcgi_destroy(void *ctx) struct fcgi_conn *fconn = ctx; TRACE_POINT(FCGI_EV_FCONN_END, fconn->conn); - if (eb_is_empty(&fconn->streams_by_id) || !fconn->conn || fconn->conn->ctx != fconn) + if (eb_is_empty(&fconn->streams_by_id) || fconn->conn->ctx != fconn) fcgi_release(fconn); } diff --git a/src/mux_h1.c b/src/mux_h1.c index 12769d95b1..fb4cd28f42 100644 --- a/src/mux_h1.c +++ b/src/mux_h1.c @@ -3337,7 +3337,7 @@ static void h1_destroy(void *ctx) struct h1c *h1c = ctx; TRACE_POINT(H1_EV_H1C_END, h1c->conn); - if (!h1c->h1s || !h1c->conn || h1c->conn->ctx != h1c) + if (!h1c->h1s || h1c->conn->ctx != h1c) h1_release(h1c); } diff --git a/src/mux_h2.c b/src/mux_h2.c index af312c1a35..d73e0cf440 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -4350,7 +4350,7 @@ static void h2_destroy(void *ctx) struct h2c *h2c = ctx; TRACE_ENTER(H2_EV_H2C_END, h2c->conn); - if (eb_is_empty(&h2c->streams_by_id) || !h2c->conn || h2c->conn->ctx != h2c) + if (eb_is_empty(&h2c->streams_by_id) || h2c->conn->ctx != h2c) h2_release(h2c); TRACE_LEAVE(H2_EV_H2C_END); } diff --git a/src/mux_pt.c b/src/mux_pt.c index 0c36c794ed..5c01ae5483 100644 --- a/src/mux_pt.c +++ b/src/mux_pt.c @@ -413,9 +413,10 @@ static void mux_pt_destroy_meth(void *ctx) struct mux_pt_ctx *pt = ctx; TRACE_POINT(PT_EV_CONN_END, pt->conn, pt->cs); - if ((pt->endp->flags & CS_EP_ORPHAN) || !(pt->conn) || pt->conn->ctx != pt) { - if (pt->conn->ctx != pt) + if ((pt->endp->flags & CS_EP_ORPHAN) || pt->conn->ctx != pt) { + if (pt->conn->ctx != pt) { pt->endp = NULL; + } mux_pt_destroy(pt); } }