From: Olivier Houchard Date: Thu, 29 Nov 2018 17:03:21 +0000 (+0100) Subject: BUG/MEDIUM: connections: Don't assume we have a mux in connect_server(). X-Git-Tag: v1.9-dev9~104 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a49d41a9af844ee58bb96e5bbe3993eca7b97bd9;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: connections: Don't assume we have a mux in connect_server(). When dealing with the previous connection, don't assume it has a mux, as it may not yet be the case if we're waiting for the ALPN. --- diff --git a/src/backend.c b/src/backend.c index 7a2168acc8..8e2769685c 100644 --- a/src/backend.c +++ b/src/backend.c @@ -1106,8 +1106,8 @@ int connect_server(struct stream *s) old_conn = srv_conn = s->sess->srv_conn; if (srv_conn) reuse = (s->target == srv_conn->target) && - (srv_conn->mux->avail_streams(srv_conn) > 0) && - conn_xprt_ready(srv_conn); + conn_xprt_ready(srv_conn) && srv_conn->mux && + (srv_conn->mux->avail_streams(srv_conn) > 0); if (srv && !reuse) { srv_conn = NULL; @@ -1195,15 +1195,16 @@ int connect_server(struct stream *s) LIST_DEL(&sess->conn_list); if (old_conn && !(old_conn->flags & CO_FL_PRIVATE) && + old_conn->mux != NULL && (old_conn->mux->avail_streams(old_conn) > 0) && (srv_conn->mux->avail_streams(srv_conn) == 1)) { LIST_ADDQ(&old_conn->session_list, &sess->conn_list); sess->srv_conn = old_conn; + did_switch = 1; } else { LIST_INIT(&sess->conn_list); sess->srv_conn = NULL; } - did_switch = 1; } }