static void mail_session_free(struct mail_session *session) { i_assert(session->refcount == 0); global_memory_free(mail_session_memsize(session)); if (session->to_idle != NULL) timeout_remove(&session->to_idle); if (!session->disconnected) hash_table_remove(mail_sessions_hash, session->id); DLLIST_REMOVE_FULL(&stable_mail_sessions, session, stable_prev, stable_next); DLLIST2_REMOVE_FULL(&mail_sessions_head, &mail_sessions_tail, session, sorted_prev, sorted_next); DLLIST_REMOVE_FULL(&session->user->sessions, session, user_prev, user_next); mail_user_unref(&session->user); if (session->ip != NULL) { DLLIST_REMOVE_FULL(&session->ip->sessions, session, ip_prev, ip_next); mail_ip_unref(&session->ip); } str_table_unref(services, &session->service); i_free(session->id); i_free(session); }
static void mail_user_free(struct mail_user *user) { i_assert(user->refcount == 0); i_assert(user->sessions == NULL); global_memory_free(mail_user_memsize(user)); hash_table_remove(mail_users_hash, user->name); DLLIST_REMOVE_FULL(&stable_mail_users, user, stable_prev, stable_next); DLLIST2_REMOVE_FULL(&mail_users_head, &mail_users_tail, user, sorted_prev, sorted_next); DLLIST_REMOVE_FULL(&user->domain->users, user, domain_prev, domain_next); mail_domain_unref(&user->domain); i_free(user->name); i_free(user); }
static void mail_ip_free(struct mail_ip *ip) { i_assert(ip->refcount == 0); i_assert(ip->sessions == NULL); global_memory_free(mail_ip_memsize(ip)); hash_table_remove(mail_ips_hash, &ip->ip); DLLIST_REMOVE_FULL(&stable_mail_ips, ip, stable_prev, stable_next); DLLIST2_REMOVE_FULL(&mail_ips_head, &mail_ips_tail, ip, sorted_prev, sorted_next); i_free(ip); }
static void mail_command_free(struct mail_command *cmd) { i_assert(cmd->refcount == 0); global_memory_free(mail_command_memsize(cmd)); DLLIST2_REMOVE_FULL(&stable_mail_commands_head, &stable_mail_commands_tail, cmd, stable_prev, stable_next); DLLIST_REMOVE_FULL(&cmd->session->commands, cmd, session_prev, session_next); mail_session_unref(&cmd->session); i_free(cmd->name); i_free(cmd->args); i_free(cmd); }