summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-04-25 15:58:46 -0400
committerAdam <Adam@anope.org>2011-04-25 15:58:46 -0400
commit0cdc628db05cc7391c6114c46c52d65d90603571 (patch)
tree5f985f006e2df90488c283fff639f88a5d9cef68
parent4a733c93d45e0ca5d757abf826d65bc1cbaf610e (diff)
Fixed crash when certain nicks expire
-rw-r--r--modules/extra/m_async_commands.cpp21
-rw-r--r--src/chanserv.cpp3
-rw-r--r--src/nickserv.cpp2
3 files changed, 13 insertions, 13 deletions
diff --git a/modules/extra/m_async_commands.cpp b/modules/extra/m_async_commands.cpp
index 7e1b24f34..b2c552351 100644
--- a/modules/extra/m_async_commands.cpp
+++ b/modules/extra/m_async_commands.cpp
@@ -138,10 +138,7 @@ class ModuleAsynchCommands : public Module, public Pipe, public AsynchCommandsSe
cm->Destroy();
}
- if (current_command == NULL)
- this->Reset();
- else
- this->reset = true;
+ this->reset = true;
}
EventReturn OnPreCommand(CommandSource &source, Command *command, const std::vector<Anope::string> &params)
@@ -189,10 +186,18 @@ class ModuleAsynchCommands : public Module, public Pipe, public AsynchCommandsSe
else if (cm->destroy)
{
if (cm->started)
+ {
cm->mutex.Unlock();
+ continue;
+ }
else
delete cm;
- continue;
+ }
+
+ if (this->reset)
+ {
+ this->Reset();
+ return this->OnNotify();
}
Log(LOG_DEBUG_2) << "Waiting for command thread " << cm->command->name << " from " << cm->source.u->nick;
@@ -220,12 +225,6 @@ class ModuleAsynchCommands : public Module, public Pipe, public AsynchCommandsSe
PopLanguage();
current_command = NULL;
-
- if (this->reset)
- {
- this->Reset();
- return this->OnNotify();
- }
}
}
diff --git a/src/chanserv.cpp b/src/chanserv.cpp
index e519cb8b2..06ef6e83c 100644
--- a/src/chanserv.cpp
+++ b/src/chanserv.cpp
@@ -406,9 +406,10 @@ void expire_chans()
// XXX this is slightly inefficient
void cs_remove_nick(NickCore *nc)
{
- for (registered_channel_map::const_iterator it = RegisteredChannelList.begin(), it_end = RegisteredChannelList.end(); it != it_end; ++it)
+ for (registered_channel_map::const_iterator it = RegisteredChannelList.begin(); it != RegisteredChannelList.end();)
{
ChannelInfo *ci = it->second;
+ ++it;
ChanAccess *access = ci->GetAccess(nc);
if (access)
diff --git a/src/nickserv.cpp b/src/nickserv.cpp
index 870ea6d2c..f5095c53d 100644
--- a/src/nickserv.cpp
+++ b/src/nickserv.cpp
@@ -243,7 +243,7 @@ int validate_user(User *u)
void expire_nicks()
{
- for (nickalias_map::const_iterator it = NickAliasList.begin(), it_end = NickAliasList.end(); it != it_end; )
+ for (nickalias_map::const_iterator it = NickAliasList.begin(); it != NickAliasList.end();)
{
NickAlias *na = it->second;
++it;