diff --git a/src/session.c b/src/session.c index 8f871f815..89f81fde8 100644 --- a/src/session.c +++ b/src/session.c @@ -705,6 +705,8 @@ int session_add_conn(struct session *sess, struct connection *conn) */ int session_check_idle_conn(struct session *sess, struct connection *conn) { + struct server *srv = objt_server(conn->target); + /* Connection must be attached to session prior to this function call. */ BUG_ON(!conn->owner || conn->owner != sess); @@ -715,7 +717,8 @@ int session_check_idle_conn(struct session *sess, struct connection *conn) /* Ensure conn is not already accounted as idle to prevent sess idle count excess increment. */ BUG_ON(conn->flags & CO_FL_SESS_IDLE); - if (sess->idle_conns >= sess->fe->max_out_conns) { + if (sess->idle_conns >= sess->fe->max_out_conns || + (srv && (srv->cur_admin & SRV_ADMF_MAINT))) { session_unown_conn(sess, conn); conn->owner = NULL; return -1;