From: Willy Tarreau Date: Wed, 1 Jul 2020 06:24:44 +0000 (+0200) Subject: MINOR: server: skip servers with no idle conns earlier X-Git-Tag: v2.2-dev12~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=151c253a1e7623ca099fb94cecb40d2adab75b04;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/backend.c b/src/backend.c index f87e36e38f..0faf7240ab 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) {