diff options
author | Adam <Adam@anope.org> | 2013-12-17 10:57:50 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2013-12-17 10:58:02 -0500 |
commit | 1ab7d536491064656b76c319760bac369a8fabf4 (patch) | |
tree | 24e514464ebd271f09b38a4b50f6b8a41b90ac8f /src/modes.cpp | |
parent | d709c819d2342aebc1708d13db890f1c1fcf19cb (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.cpp | 20 |
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) |