From aa27853ce2111034c85c53fd824bdb52f0f34b07 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Tue, 30 Jun 2020 14:47:46 +0200 Subject: [PATCH] BUG/MEDIUM: connection: Don't consider new private connections as available When a connection is created and the multiplexer is installed, if the connection is marked as private, don't consider it as available, regardless the number of available streams. This test is performed when the mux is installed when the connection is created, in connect_server(), and when the mux is installed after the handshakes stage. No backport needed, this is 2.2-dev. --- src/backend.c | 8 ++++---- src/connection.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend.c b/src/backend.c index 5958a824e..324d7565a 100644 --- a/src/backend.c +++ b/src/backend.c @@ -1529,12 +1529,12 @@ int connect_server(struct stream *s) conn_full_close(srv_conn); return SF_ERR_INTERNAL; } - /* If we're doing http-reuse always, and the connection - * is an http2 connection, add it to the available list, - * so that others can use it right away. + /* 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 (srv && ((s->be->options & PR_O_REUSE_MASK) == PR_O_REUSE_ALWS) && - srv_conn->mux->avail_streams(srv_conn) > 0) + !(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)); } /* The CO_FL_SEND_PROXY flag may have been set by the connect method, diff --git a/src/connection.c b/src/connection.c index da0d406cb..56921bec5 100644 --- a/src/connection.c +++ b/src/connection.c @@ -61,7 +61,7 @@ int conn_create_mux(struct connection *conn) goto fail; srv = objt_server(conn->target); if (srv && ((srv->proxy->options & PR_O_REUSE_MASK) != PR_O_REUSE_NEVR) && - conn->mux->avail_streams(conn) > 0) + !(conn->flags & CO_FL_PRIVATE) && conn->mux->avail_streams(conn) > 0) LIST_ADDQ(&srv->available_conns[tid], mt_list_to_list(&conn->list)); return 0; fail: