diff --git a/include/haproxy/server.h b/include/haproxy/server.h index 75a5b27f3..1fa1b2d4d 100644 --- a/include/haproxy/server.h +++ b/include/haproxy/server.h @@ -250,14 +250,17 @@ static inline int srv_add_to_idle_list(struct server *srv, struct connection *co * last purge, or if we already don't have idle conns for the * current thread and we don't exceed last count by global.nbthread. */ - if (srv && srv->pool_purge_delay > 0 && - (srv->max_idle_conns == -1 || srv->max_idle_conns > srv->curr_idle_conns) && - (srv->curr_used_conns + srv->curr_idle_conns < MAX(srv->curr_used_conns, srv->est_need_conns) + - (MT_LIST_ISEMPTY(&srv->safe_conns[tid]) && MT_LIST_ISEMPTY(&srv->idle_conns[tid])) ? global.nbthread : 1) && - !(conn->flags & CO_FL_PRIVATE) && + if (!(conn->flags & CO_FL_PRIVATE) && + srv && srv->pool_purge_delay > 0 && ((srv->proxy->options & PR_O_REUSE_MASK) != PR_O_REUSE_NEVR) && - !conn->mux->used_streams(conn) && conn->mux->avail_streams(conn) && - ha_used_fds < global.tune.pool_low_count) { + ha_used_fds < global.tune.pool_high_count && + (srv->max_idle_conns == -1 || srv->max_idle_conns > srv->curr_idle_conns) && + ((ha_used_fds < global.tune.pool_low_count && + MT_LIST_ISEMPTY(&srv->safe_conns[tid]) && + (is_safe || MT_LIST_ISEMPTY(&srv->idle_conns[tid]))) || + (srv->curr_used_conns + srv->curr_idle_conns < + MAX(srv->curr_used_conns, srv->est_need_conns) + global.nbthread)) && + !conn->mux->used_streams(conn) && conn->mux->avail_streams(conn)) { int retadd; retadd = _HA_ATOMIC_ADD(&srv->curr_idle_conns, 1);