summaryrefslogtreecommitdiff
path: root/src/modes.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-09-05 18:44:43 -0400
committerAdam <Adam@anope.org>2011-09-10 02:06:31 -0400
commit63cb8ca24c0d4003343340bb8413b7f84de1a6a3 (patch)
treed71f0cead730065dd8509e284d66b6767e7ebd25 /src/modes.cpp
parentdc5d1fa21c20000b77bf713585333c79121a8df0 (diff)
Moved signal/thread/mode checking to use signal pipes
Diffstat (limited to 'src/modes.cpp')
-rw-r--r--src/modes.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/modes.cpp b/src/modes.cpp
index d51622e22..c3e52e036 100644
--- a/src/modes.cpp
+++ b/src/modes.cpp
@@ -9,6 +9,7 @@
#include "services.h"
#include "modules.h"
+ModeManager::ModePipe *ModeManager::mpipe = NULL;
/* List of pairs of user/channels and their stacker info */
std::list<std::pair<Base *, StackerInfo *> > ModeManager::StackerObjects;
@@ -345,6 +346,16 @@ void StackerInfo::AddMode(Mode *mode, bool Set, const Anope::string &Param)
list->push_back(std::make_pair(mode, Param));
}
+/** Called when there are modes to be set
+ */
+void ModeManager::ModePipe::OnNotify()
+{
+ if (!Me || !Me->IsSynced())
+ return;
+
+ ModeManager::ProcessModes();
+}
+
/** Get the stacker info for an item, if one doesnt exist it is created
* @param Item The user/channel etc
* @return The stacker info
@@ -360,6 +371,11 @@ StackerInfo *ModeManager::GetInfo(Base *Item)
StackerInfo *s = new StackerInfo();
StackerObjects.push_back(std::make_pair(Item, s));
+
+ if (mpipe == NULL)
+ mpipe = new ModePipe();
+ mpipe->Notify();
+
return s;
}