]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: connections: Set CO_FL_CONNECTED in conn_complete_session().
authorOlivier Houchard <ohouchard@haproxy.com>
Thu, 23 Jan 2020 12:15:14 +0000 (13:15 +0100)
committerOlivier Houchard <cognet@ci0.org>
Thu, 23 Jan 2020 12:20:03 +0000 (13:20 +0100)
We can't just assume conn_create_mux() will be called, and set CO_FL_CONNECTED,
conn_complete_session() might be call synchronously if we're not using SSL,
so ew haee no choice but to set CO_FL_CONNECTED in there. This should fix
the recent breakage of the mcli reg tests.

src/connection.c
src/session.c

index 8754d6e0005c8043e486402f6792d91220f1feff..7e35630f47c404478289e533c52d4fd93c43cb7c 100644 (file)
@@ -43,16 +43,16 @@ struct mux_proto_list mux_proto_list = {
 
 int conn_create_mux(struct connection *conn)
 {
-       /* Verify if the connection just established. */
-       if (unlikely(!(conn->flags & (CO_FL_WAIT_L4_CONN | CO_FL_WAIT_L6_CONN | CO_FL_CONNECTED))))
-               conn->flags |= CO_FL_CONNECTED;
-
        if (conn_is_back(conn)) {
                struct server *srv;
                struct conn_stream *cs = conn->ctx;
 
                if (conn->flags & CO_FL_ERROR)
                        goto fail;
+               /* Verify if the connection just established. */
+               if (unlikely(!(conn->flags & (CO_FL_WAIT_L4_CONN | CO_FL_WAIT_L6_CONN | CO_FL_CONNECTED))))
+                       conn->flags |= CO_FL_CONNECTED;
+
                if (conn_install_mux_be(conn, conn->ctx, conn->owner) < 0)
                        goto fail;
                srv = objt_server(conn->target);
index d80392d1d2e6e7a5a4f2745df86c0f0777ca0262..85c7976fc5c1d7e6099d89c08e9258c96e59bd86 100644 (file)
@@ -433,6 +433,10 @@ int conn_complete_session(struct connection *conn)
        if (conn->flags & CO_FL_ERROR)
                goto fail;
 
+       /* Verify if the connection just established. */
+       if (unlikely(!(conn->flags & (CO_FL_WAIT_L4_CONN | CO_FL_WAIT_L6_CONN | CO_FL_CONNECTED))))
+               conn->flags |= CO_FL_CONNECTED;
+
        /* if logs require transport layer information, note it on the connection */
        if (sess->fe->to_log & LW_XPRT)
                conn->flags |= CO_FL_XPRT_TRACKED;