From 7c452ccbff8261ead35c1bd8c932a8d4e4a3e451 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Thu, 14 Apr 2022 11:08:26 +0200 Subject: [PATCH] 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. --- src/mux_fcgi.c | 2 +- src/mux_h1.c | 2 +- src/mux_h2.c | 2 +- src/mux_pt.c | 5 +++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/mux_fcgi.c b/src/mux_fcgi.c index 56a9a0bd0..cdb118c3a 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 12769d95b..fb4cd28f4 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 af312c1a3..d73e0cf44 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 0c36c794e..5c01ae548 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); } }