Add a BUG_ON() on session_check_idle_conn() to ensure the connection is
not already flagged as CO_FL_SESS_IDLE.
This checks that this function is only called one time per connection
transition from active to idle. This is necessary to ensure that session
idle counter is only incremented one time per connection.
if (!conn->owner)
return 0;
+ /* 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) {
session_unown_conn(sess, conn);
conn->owner = NULL;
- conn->flags &= ~CO_FL_SESS_IDLE;
conn->mux->destroy(conn->ctx);
return -1;
- } else {
+ }
+ else {
conn->flags |= CO_FL_SESS_IDLE;
sess->idle_conns++;
}
+
return 0;
}