summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-10-20 04:40:50 +0000
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-10-20 04:40:50 +0000
commit7bb73d2e63c1ec31a2af58b57c05bbce39c4dd59 (patch)
tree171fa519a338f2f00c0b667b6ce2c3b7c402dcd7
parent9b8c61e7e73b6bac60adeb3aa4f4d8127b813558 (diff)
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
-rw-r--r--src/channels.cpp46
-rw-r--r--src/modules.cpp2
2 files changed, 17 insertions, 31 deletions
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);