summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2014-10-06 13:52:43 -0400
committerAdam <Adam@anope.org>2014-10-06 14:06:36 -0400
commitbe928b5bbc3f77050c4042bde151b370f4dd01e9 (patch)
tree300ffb7552430b8dd0fddc95e17c588cde668632
parent31bc1d6b828f400a3e4f4fc56657b54f58e3ce1e (diff)
Clean up collide timers on identify, otherwise you can login and logout before the timer tick which will still enforce the collide
-rw-r--r--modules/pseudoclients/nickserv.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/modules/pseudoclients/nickserv.cpp b/modules/pseudoclients/nickserv.cpp
index a7941fc51..c299c0da3 100644
--- a/modules/pseudoclients/nickserv.cpp
+++ b/modules/pseudoclients/nickserv.cpp
@@ -11,6 +11,9 @@
#include "module.h"
+class NickServCollide;
+static std::set<NickServCollide *> collides;
+
/** Timer for colliding nicks to force people off of nicknames
*/
class NickServCollide : public Timer
@@ -23,6 +26,17 @@ class NickServCollide : public Timer
public:
NickServCollide(Module *me, NickServService *nss, User *user, NickAlias *nick, time_t delay) : Timer(me, delay), service(nss), u(user), ts(user->timestamp), na(nick)
{
+ collides.insert(this);
+ }
+
+ ~NickServCollide()
+ {
+ collides.erase(this);
+ }
+
+ User *GetUser()
+ {
+ return u;
}
void Tick(time_t t) anope_override
@@ -344,6 +358,16 @@ class NickServCore : public Module, public NickServService
"Your privacy is respected; this e-mail won't be given to\n"
"any third-party person."), Config->StrictPrivmsg.c_str(), NickServ->nick.c_str());
}
+
+ for (std::set<NickServCollide *>::iterator it = collides.begin(); it != collides.end(); ++it)
+ {
+ NickServCollide *c = *it;
+ if (c->GetUser() == u)
+ {
+ delete c;
+ break;
+ }
+ }
}
void OnNickGroup(User *u, NickAlias *target) anope_override