diff options
author | Attila Molnar <attilamolnar@hush.com> | 2015-11-23 11:37:26 +0100 |
---|---|---|
committer | Attila Molnar <attilamolnar@hush.com> | 2015-11-23 11:37:26 +0100 |
commit | bf2f81811fe1869a98861b2d5edc0fba8f884123 (patch) | |
tree | a47332845afabdbe9b5ad6fbec590fbcfc1901e6 /src | |
parent | 4cdde6e77525350692f3a3776691102ff15ba96c (diff) |
core_whowas Add WhoWas::Manager::PurgeNick()
Diffstat (limited to 'src')
-rw-r--r-- | src/coremods/core_whowas.cpp | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/src/coremods/core_whowas.cpp b/src/coremods/core_whowas.cpp index 53c978ae8..12ab940dd 100644 --- a/src/coremods/core_whowas.cpp +++ b/src/coremods/core_whowas.cpp @@ -119,10 +119,7 @@ void WhoWas::Manager::Add(User* user) if (whowas.size() > this->MaxGroups) { // Too many nicks, remove the nick which was inserted the longest time ago from both the map and the fifo - nick = whowas_fifo.front(); - whowas_fifo.pop_front(); - whowas.erase(nick->nick); - delete nick; + PurgeNick(whowas_fifo.front()); } } else @@ -150,18 +147,7 @@ void WhoWas::Manager::Prune() { WhoWas::Nick* nick = whowas_fifo.front(); if ((whowas_fifo.size() > this->MaxGroups) || (nick->addtime < min)) - { - /* hopefully redundant integrity check, but added while debugging r6216 */ - if (!whowas.erase(nick->nick)) - { - /* this should never happen, if it does maps are corrupt */ - ServerInstance->Logs->Log("WHOWAS", LOG_DEFAULT, "BUG: Whowas maps got corrupted! (1)"); - return; - } - - whowas_fifo.pop_front(); - delete nick; - } + PurgeNick(nick); else break; } @@ -218,6 +204,25 @@ void WhoWas::Manager::UpdateConfig(unsigned int NewGroupSize, unsigned int NewMa Prune(); } +void WhoWas::Manager::PurgeNick(whowas_users::iterator it) +{ + WhoWas::Nick* nick = it->second; + whowas_fifo.erase(nick); + whowas.erase(it); + delete nick; +} + +void WhoWas::Manager::PurgeNick(WhoWas::Nick* nick) +{ + whowas_users::iterator it = whowas.find(nick->nick); + if (it == whowas.end()) + { + ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "ERROR: Inconsistency detected in whowas database, please report"); + return; + } + PurgeNick(it); +} + WhoWas::Entry::Entry(User* user) : host(user->host) , dhost(user->dhost) |