From 151c253a1e7623ca099fb94cecb40d2adab75b04 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 1 Jul 2020 08:24:44 +0200 Subject: [PATCH] MINOR: server: skip servers with no idle conns earlier In conn_backend_get() we can avoid locking other servers when trying to steal their connections when we know for sure they will not have one, so let's do it to lower the contention on the lock. --- src/backend.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend.c b/src/backend.c index f87e36e38..0faf7240a 100644 --- a/src/backend.c +++ b/src/backend.c @@ -1099,6 +1099,9 @@ static struct connection *conn_backend_get(struct server *srv, int is_safe) for (i = tid; !found && (i = ((i + 1 == global.nbthread) ? 0 : i + 1)) != tid;) { struct mt_list *elt1, elt2; + if (!srv->curr_idle_thr[i]) + continue; + HA_SPIN_LOCK(OTHER_LOCK, &idle_conns[i].toremove_lock); mt_list_for_each_entry_safe(conn, &mt_list[i], list, elt1, elt2) { if (conn->mux->takeover && conn->mux->takeover(conn) == 0) {