MEDIUM: backend: add reused conn to sess if mux marked as HOL blocking

If a connection is using a mux protocol subject to HOL blocking, add it
to the session instead of the available list to avoid sharing it with
other clients on connection reuse.
diff --git a/src/backend.c b/src/backend.c
index 48cc7a6..99f179d 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -1100,7 +1100,7 @@
  * (safe or idle connections). The <is_safe> argument means what type of
  * connection the caller wants.
  */
-static struct connection *conn_backend_get(struct server *srv, int is_safe)
+static struct connection *conn_backend_get(struct stream *s, struct server *srv, int is_safe)
 {
 	struct mt_list *mt_list = is_safe ? srv->safe_conns : srv->idle_conns;
 	struct connection *conn;
@@ -1202,7 +1202,16 @@
 		conn->flags &= ~CO_FL_LIST_MASK;
 		__ha_barrier_atomic_store();
 
-		LIST_ADDQ(&srv->available_conns[tid], mt_list_to_list(&conn->list));
+		if ((s->be->options & PR_O_REUSE_MASK) == PR_O_REUSE_SAFE &&
+		    conn->mux->flags & MX_FL_HOL_RISK) {
+			/* attach the connection to the session private list
+			 */
+			conn->owner = s->sess;
+			session_add_conn(conn->owner, conn, conn->target);
+		}
+		else {
+			LIST_ADDQ(&srv->available_conns[tid], mt_list_to_list(&conn->list));
+		}
 	}
 	return conn;
 }
@@ -1279,18 +1288,18 @@
 				/* we're on the second column of the tables above, let's
 				 * try idle then safe.
 				 */
-				srv_conn = conn_backend_get(srv, 0);
+				srv_conn = conn_backend_get(s, srv, 0);
 			}
 			else if (srv->safe_conns &&
 			         ((s->txn && (s->txn->flags & TX_NOT_FIRST)) ||
 				  (s->be->options & PR_O_REUSE_MASK) >= PR_O_REUSE_AGGR) &&
 				 srv->curr_safe_nb > 0) {
-				srv_conn = conn_backend_get(srv, 1);
+				srv_conn = conn_backend_get(s, srv, 1);
 			}
 			else if (srv->idle_conns &&
 			         ((s->be->options & PR_O_REUSE_MASK) == PR_O_REUSE_ALWS) &&
 				 srv->curr_idle_nb > 0) {
-				srv_conn = conn_backend_get(srv, 0);
+				srv_conn = conn_backend_get(s, srv, 0);
 			}
 			/* If we've picked a connection from the pool, we now have to
 			 * detach it. We may have to get rid of the previous idle