From 00464ab8f432fb5f6b3939809f781b8163946dc2 Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Wed, 14 Oct 2020 18:17:08 +0200 Subject: [PATCH] MEDIUM: backend: add new conn to session if mux marked as HOL blocking When allocating a new session on connect_server, if the mux protocol is marked as subject of HOL blocking, add it into session instead of available list to avoid sharing it with other clients. --- src/backend.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/backend.c b/src/backend.c index bd841c20a..48cc7a661 100644 --- a/src/backend.c +++ b/src/backend.c @@ -1540,13 +1540,16 @@ int connect_server(struct stream *s) /* If we're doing http-reuse always, and the connection is not * private with available streams (an http2 connection), add it * to the available list, so that others can use it right - * away. If the connection is private, add it in the session - * server list. + * away. If the connection is private or we're doing http-reuse + * safe and the mux protocol supports multiplexing, add it in + * the session server list. */ if (srv && ((s->be->options & PR_O_REUSE_MASK) == PR_O_REUSE_ALWS) && !(srv_conn->flags & CO_FL_PRIVATE) && srv_conn->mux->avail_streams(srv_conn) > 0) LIST_ADDQ(&srv->available_conns[tid], mt_list_to_list(&srv_conn->list)); - else if (srv_conn->flags & CO_FL_PRIVATE) { + else if (srv_conn->flags & CO_FL_PRIVATE || + ((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); }