From bf2f81811fe1869a98861b2d5edc0fba8f884123 Mon Sep 17 00:00:00 2001 From: Attila Molnar Date: Mon, 23 Nov 2015 11:37:26 +0100 Subject: core_whowas Add WhoWas::Manager::PurgeNick() --- src/coremods/core_whowas.cpp | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'src/coremods') 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) -- cgit v1.2.3