From: Olivier Houchard Date: Fri, 13 Apr 2018 13:50:27 +0000 (+0200) Subject: BUG/MEDIUM: connection: Make sure we have a mux before calling detach(). X-Git-Tag: v1.9-dev1~307 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=302f9ef0556b6795bda8882edf56611ee252fceb;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: connection: Make sure we have a mux before calling detach(). In some cases, we call cs_destroy() very early, so early the connection doesn't yet have a mux, so we can't call mux->detach(). In this case, just destroy the associated connection. This should be backported to 1.8. --- diff --git a/include/proto/connection.h b/include/proto/connection.h index bc8d88484c..8566736fd6 100644 --- a/include/proto/connection.h +++ b/include/proto/connection.h @@ -699,7 +699,20 @@ static inline void conn_free(struct connection *conn) /* Release a conn_stream, and kill the connection if it was the last one */ static inline void cs_destroy(struct conn_stream *cs) { - cs->conn->mux->detach(cs); + if (cs->conn->mux) + cs->conn->mux->detach(cs); + else { + /* It's too early to have a mux, let's just destroy + * the connection + */ + struct connection *conn = cs->conn; + + conn_stop_tracking(conn); + conn_full_close(conn); + if (conn->destroy_cb) + conn->destroy_cb(conn); + conn_free(conn); + } cs_free(cs); }