summaryrefslogtreecommitdiff
path: root/src/modes.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2013-12-17 10:57:50 -0500
committerAdam <Adam@anope.org>2013-12-17 10:58:02 -0500
commit1ab7d536491064656b76c319760bac369a8fabf4 (patch)
tree24e514464ebd271f09b38a4b50f6b8a41b90ac8f /src/modes.cpp
parentd709c819d2342aebc1708d13db890f1c1fcf19cb (diff)
Set pending mode changes immediately when an object is removed from the mode stacker. And fix mlock creator from cs set persist on.
Diffstat (limited to 'src/modes.cpp')
-rw-r--r--src/modes.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/modes.cpp b/src/modes.cpp
index 55ce2b506..d82b367dc 100644
--- a/src/modes.cpp
+++ b/src/modes.cpp
@@ -570,14 +570,30 @@ void ModeManager::ProcessModes()
}
}
+template<typename T>
+static void StackerDel(std::map<T *, StackerInfo *> &map, T *obj)
+{
+ typename std::map<T *, StackerInfo *>::iterator it = map.find(obj);
+ if (it != map.end())
+ {
+ StackerInfo *si = it->second;
+ std::list<Anope::string> ModeStrings = BuildModeStrings(si);
+ for (std::list<Anope::string>::iterator lit = ModeStrings.begin(), lit_end = ModeStrings.end(); lit != lit_end; ++lit)
+ IRCD->SendMode(si->bi, obj, lit->c_str());
+
+ delete si;
+ map.erase(it);
+ }
+}
+
void ModeManager::StackerDel(User *u)
{
- UserStackerObjects.erase(u);
+ ::StackerDel(UserStackerObjects, u);
}
void ModeManager::StackerDel(Channel *c)
{
- ChannelStackerObjects.erase(c);
+ ::StackerDel(ChannelStackerObjects, c);
}
void ModeManager::StackerDel(Mode *m)