diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-01-03 20:58:21 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-01-03 20:58:21 +0000 |
commit | 2802a62272f4295ecc3bd73a44950749e8b96877 (patch) | |
tree | 05e5e96e2894fea4943d087ff165fc981d73b838 | |
parent | c218d8091fd673632e0bae5f416d523b81100904 (diff) |
Fix lusers breakage introduced by latest set of optimizations
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6219 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | include/mode.h | 3 | ||||
-rw-r--r-- | include/users.h | 6 | ||||
-rw-r--r-- | src/mode.cpp | 5 | ||||
-rw-r--r-- | src/users.cpp | 15 |
4 files changed, 28 insertions, 1 deletions
diff --git a/include/mode.h b/include/mode.h index d28b03529..2875d853e 100644 --- a/include/mode.h +++ b/include/mode.h @@ -171,6 +171,9 @@ class ModeHandler : public Extensible /** Get number of items with this mode set on them */ virtual unsigned int GetCount(); + /** Adjust usage count returned by GetCount + */ + virtual void ChangeCount(int modifier); /** * Get the 'value' of this modes prefix. * determines which to display when there are multiple. diff --git a/include/users.h b/include/users.h index 719af2271..6e79cf285 100644 --- a/include/users.h +++ b/include/users.h @@ -231,6 +231,12 @@ class userrec : public connection char* cached_hostip; char* cached_makehost; char* cached_fullrealhost; + + /** When we erase the user (in the destructor), + * we call this method to subtract one from all + * mode characters this user is making use of. + */ + void DecrementModes(); public: /** Resolvers for looking up this users IP address * This will occur if and when res_reverse completes. diff --git a/src/mode.cpp b/src/mode.cpp index 68d7e0bd0..62dd61f4c 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -76,6 +76,11 @@ unsigned int ModeHandler::GetCount() return 0; } +void ModeHandler::ChangeCount(int modifier) +{ + count += modifier; +} + ModeType ModeHandler::GetModeType() { return m_type; diff --git a/src/users.cpp b/src/users.cpp index b4f25a75e..c01c4e4b6 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -289,6 +289,19 @@ const char* userrec::FormatModes() return data; } +void userrec::DecrementModes() +{ + for (int n = 0; n < 64; n++) + { + if (modes[n]) + { + ModeHandler* mh = ServerInstance->Modes->FindMode(n+65, MODETYPE_USER); + if (mh) + mh->ChangeCount(-1); + } + } +} + userrec::userrec(InspIRCd* Instance) : ServerInstance(Instance) { ServerInstance->Log(DEBUG,"userrec::userrec(): Instance: %08x",ServerInstance); @@ -317,7 +330,7 @@ userrec::userrec(InspIRCd* Instance) : ServerInstance(Instance) userrec::~userrec() { this->InvalidateCache(); - + this->DecrementModes(); if (ip) { clonemap::iterator x = ServerInstance->local_clones.find(this->GetIPString()); |