struct modeNode* mNode;
unsigned int n;
- if (reason) {
+ if (reason)
irc_part(user, channel, reason);
- }
mNode = GetUserMode(channel, user);
modeList_remove(&user->channels, mNode);
free(mNode);
- if (!deleting && !channel->members.used && !channel->locks)
+ if (!deleting && !channel->members.used && !channel->locks && !(channel->modes & MODE_REGISTERED))
DelChannel(channel);
}
static void
hash_cleanup(void)
{
+ dict_iterator_t it, next;
+
DelServer(self, 0, NULL);
+ for (it = dict_first(channels); it; it = next) {
+ next = iter_next(it);
+ DelChannel(iter_data(it));
+ }
dict_delete(channels);
dict_delete(clients);
dict_delete(servers);