X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fhash.c;h=edd745421fca6e7cbd9fd2bf56a074943c1d9a15;hb=b38e1131c3053d837732fb441e7031a9c9ea997f;hp=cbe43ceaa9c1dc5627ff2f176e1eaf624ce7eb00;hpb=3a466e0ac969cc859b350b5cf38c690ab5c821fe;p=srvx.git diff --git a/src/hash.c b/src/hash.c index cbe43ce..edd7454 100644 --- a/src/hash.c +++ b/src/hash.c @@ -532,9 +532,8 @@ DelChannelUser(struct userNode* user, struct chanNode* channel, const char *reas struct modeNode* mNode; unsigned int n; - if (reason) { + if (reason) irc_part(user, channel, reason); - } mNode = GetUserMode(channel, user); @@ -552,7 +551,7 @@ DelChannelUser(struct userNode* user, struct chanNode* channel, const char *reas 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); } @@ -708,7 +707,13 @@ DEFINE_LIST(serverList, struct server*) 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);