From: Olivier Houchard Date: Thu, 23 Jan 2020 12:15:14 +0000 (+0100) Subject: BUG/MEDIUM: connections: Set CO_FL_CONNECTED in conn_complete_session(). X-Git-Tag: v2.2-dev2~97 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a8a415d31a;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: connections: Set CO_FL_CONNECTED in conn_complete_session(). 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. --- diff --git a/src/connection.c b/src/connection.c index 8754d6e000..7e35630f47 100644 --- a/src/connection.c +++ b/src/connection.c @@ -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); diff --git a/src/session.c b/src/session.c index d80392d1d2..85c7976fc5 100644 --- a/src/session.c +++ b/src/session.c @@ -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;