MEDIUM: backend: use a trylock to grab a connection on high FD counts as well

Commit b1adf03df ("MEDIUM: backend: use a trylock when trying to grab an
idle connection") solved a contention issue on the backend under normal
condition, but there is another one further, which only happens when the
number of FDs in use is considered too high, and which obviously causes
random crashes with just 16 threads once the number of FDs is about to be
exhausted.

Like the aforementioned patch, this one should be backported to 2.3.
This commit is contained in:
Willy Tarreau 2021-03-26 20:52:10 +01:00
parent 2c481d0105
commit 9b9f8477f8

View File

@ -1449,7 +1449,9 @@ int connect_server(struct stream *s)
// see it possibly larger.
ALREADY_CHECKED(i);
HA_SPIN_LOCK(IDLE_CONNS_LOCK, &idle_conns[i].idle_conns_lock);
if (HA_SPIN_TRYLOCK(IDLE_CONNS_LOCK, &idle_conns[i].idle_conns_lock) != 0)
continue;
node = ebmb_first(&srv->per_thr[i].idle_conns);
if (node) {
conn_node = ebmb_entry(node, struct conn_hash_node, node);