diff options
author | Adam <Adam@anope.org> | 2011-04-25 15:58:46 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2011-04-25 15:58:46 -0400 |
commit | 0cdc628db05cc7391c6114c46c52d65d90603571 (patch) | |
tree | 5f985f006e2df90488c283fff639f88a5d9cef68 | |
parent | 4a733c93d45e0ca5d757abf826d65bc1cbaf610e (diff) |
Fixed crash when certain nicks expire
-rw-r--r-- | modules/extra/m_async_commands.cpp | 21 | ||||
-rw-r--r-- | src/chanserv.cpp | 3 | ||||
-rw-r--r-- | src/nickserv.cpp | 2 |
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> ¶ms) @@ -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; |