From 7bb73d2e63c1ec31a2af58b57c05bbce39c4dd59 Mon Sep 17 00:00:00 2001 From: danieldg Date: Tue, 20 Oct 2009 04:40:50 +0000 Subject: Fix channel deletion on user quit and automatic removal of mode "z" git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11934 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/channels.cpp | 46 ++++++++++++++++------------------------------ src/modules.cpp | 2 +- 2 files changed, 17 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/channels.cpp b/src/channels.cpp index 0e45de33f..d7f8f372e 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -135,6 +135,22 @@ void Channel::DelUser(User* user) delete a->second; userlist.erase(a); } + + if (userlist.empty()) + { + ModResult res; + FIRST_MOD_RESULT(OnChannelPreDelete, res, (this)); + if (res == MOD_RES_DENY) + return; + chan_hash::iterator iter = ServerInstance->chanlist->find(this->name); + /* kill the record */ + if (iter != ServerInstance->chanlist->end()) + { + FOREACH_MOD(I_OnChannelDelete, OnChannelDelete(this)); + ServerInstance->chanlist->erase(iter); + } + ServerInstance->GlobalCulls.AddItem(this); + } } bool Channel::HasUser(User* user) @@ -466,21 +482,6 @@ void Channel::PartUser(User *user, std::string &reason) } this->DelUser(user); - if (userlist.empty()) - { - ModResult res; - FIRST_MOD_RESULT(OnChannelPreDelete, res, (this)); - if (res == MOD_RES_DENY) - return; - chan_hash::iterator iter = ServerInstance->chanlist->find(this->name); - /* kill the record */ - if (iter != ServerInstance->chanlist->end()) - { - FOREACH_MOD(I_OnChannelDelete, OnChannelDelete(this)); - ServerInstance->chanlist->erase(iter); - } - ServerInstance->GlobalCulls.AddItem(this); - } } void Channel::ServerKickUser(User* user, const char* reason, const std::string& servername) @@ -545,21 +546,6 @@ void Channel::KickUser(User *src, User *user, const char* reason) } this->DelUser(user); - if (userlist.empty()) - { - ModResult res; - FIRST_MOD_RESULT(OnChannelPreDelete, res, (this)); - if (res == MOD_RES_DENY) - return; - chan_hash::iterator iter = ServerInstance->chanlist->find(this->name); - /* kill the record */ - if (iter != ServerInstance->chanlist->end()) - { - FOREACH_MOD(I_OnChannelDelete, OnChannelDelete(this)); - ServerInstance->chanlist->erase(iter); - } - ServerInstance->GlobalCulls.AddItem(this); - } } void Channel::WriteChannel(User* user, const char* text, ...) diff --git a/src/modules.cpp b/src/modules.cpp index eb76897a2..a0eb9e19e 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -480,7 +480,7 @@ void ModuleManager::DoSafeUnload(Module* mod) mod->OnCleanup(TYPE_USER,u->second); u->second->doUnhookExtensions(items); } - for(char m='A'; m < 'z'; m++) + for(char m='A'; m <= 'z'; m++) { ModeHandler* mh; mh = ServerInstance->Modes->FindMode(m, MODETYPE_USER); -- cgit v1.2.3