]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: connections: Don't assume we have a mux in connect_server().
authorOlivier Houchard <ohouchard@haproxy.com>
Thu, 29 Nov 2018 17:03:21 +0000 (18:03 +0100)
committerWilly Tarreau <w@1wt.eu>
Sat, 1 Dec 2018 09:47:16 +0000 (10:47 +0100)
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.

src/backend.c

index 7a2168acc87c3c6279bf7be4727a2c9a6e84d6f4..8e2769685c8d26aaed4a47534f53a80a10eabc50 100644 (file)
@@ -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;
                        }
 
                }