* 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);