CLEANUP: connection: do not use conn->owner when the session is known

At a few places we used to rely on conn->owner to retrieve the session
while the session is already known. This is not correct because at some
of these points the reason the connection's owner was still the session
(instead of NULL) is a mistake. At one place a comparison is even made
between the session and conn->owner assuming it's valid without checking
if it's NULL. Let's clean this up to use the session all the time.

Note that this will be needed for a forthcoming fix and will have to be
backported.
diff --git a/include/haproxy/session.h b/include/haproxy/session.h
index 6a24d8a..8174a2a 100644
--- a/include/haproxy/session.h
+++ b/include/haproxy/session.h
@@ -103,7 +103,7 @@
 	int found = 0;
 
 	/* Already attach to the session or not the connection owner */
-	if (!LIST_ISEMPTY(&conn->session_list) || conn->owner != sess)
+	if (!LIST_ISEMPTY(&conn->session_list) || (conn->owner && conn->owner != sess))
 		return 1;
 
 	list_for_each_entry(srv_list, &sess->srv_list, srv_list) {
diff --git a/src/backend.c b/src/backend.c
index e0f7dd6..a76f08c 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -1207,7 +1207,7 @@
 			/* attach the connection to the session private list
 			 */
 			conn->owner = s->sess;
-			session_add_conn(conn->owner, conn, conn->target);
+			session_add_conn(s->sess, conn, conn->target);
 		}
 		else {
 			LIST_ADDQ(&srv->available_conns[tid], mt_list_to_list(&conn->list));
@@ -1563,7 +1563,7 @@
 		         ((s->be->options & PR_O_REUSE_MASK) == PR_O_REUSE_SAFE &&
 		          srv_conn->mux->flags & MX_FL_HOL_RISK)) {
 			/* If it fail now, the same will be done in mux->detach() callback */
-			session_add_conn(srv_conn->owner, srv_conn, srv_conn->target);
+			session_add_conn(s->sess, srv_conn, srv_conn->target);
 		}
 	}
 
diff --git a/src/connection.c b/src/connection.c
index dc54b9d..366bb25 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -54,10 +54,10 @@
 			goto fail;
 
 		if (sess && obj_type(sess->origin) == OBJ_TYPE_CHECK) {
-			if (conn_install_mux_chk(conn, conn->ctx, conn->owner) < 0)
+			if (conn_install_mux_chk(conn, conn->ctx, sess) < 0)
 				goto fail;
 		}
-		else if (conn_install_mux_be(conn, conn->ctx, conn->owner) < 0)
+		else if (conn_install_mux_be(conn, conn->ctx, sess) < 0)
 			goto fail;
 		srv = objt_server(conn->target);
 
@@ -72,7 +72,7 @@
 			LIST_ADDQ(&srv->available_conns[tid], mt_list_to_list(&conn->list));
 		else if (conn->flags & CO_FL_PRIVATE) {
 			/* If it fail now, the same will be done in mux->detach() callback */
-			session_add_conn(conn->owner, conn, conn->target);
+			session_add_conn(sess, conn, conn->target);
 		}
 		return 0;
 fail: