So conn_free() only calls session_unown_conn() if necessary. The details are now
fully handled by session_unown_conn().
{
/* Remove ourself from the session's connections list, if any. */
if (!LIST_ISEMPTY(&conn->session_list)) {
- struct session *sess = conn->owner;
- if (conn->flags & CO_FL_SESS_IDLE)
- sess->idle_conns--;
- session_unown_conn(sess, conn);
+ session_unown_conn(conn->owner, conn);
}
sockaddr_free(&conn->src);
static inline void session_unown_conn(struct session *sess, struct connection *conn)
{
struct sess_srv_list *srv_list = NULL;
+
+ if (conn->flags & CO_FL_SESS_IDLE)
+ sess->idle_conns--;
LIST_DEL(&conn->session_list);
LIST_INIT(&conn->session_list);
list_for_each_entry(srv_list, &sess->srv_list, srv_list) {