X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcmd_whowas.cpp;h=1531f6239d74baf02d94e67caaac69e46a214fe8;hb=4c83624ed825ca123401a45c8d2844ba6453a85b;hp=4886c9800e8127e6133b4c555b9d0b5b6ca40ff9;hpb=e6fa614ad27cd68aa61605ca0884eee9c44384eb;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/cmd_whowas.cpp b/src/cmd_whowas.cpp index 4886c9800..1531f6239 100644 --- a/src/cmd_whowas.cpp +++ b/src/cmd_whowas.cpp @@ -11,11 +11,12 @@ * --------------------------------------------------- */ -#include "configreader.h" -#include "users.h" +#include "inspircd.h" #include "commands/cmd_whowas.h" -extern "C" command_t* init_command(InspIRCd* Instance) +WhoWasMaintainTimer * timer; + +extern "C" DllExport command_t* init_command(InspIRCd* Instance) { return new cmd_whowas(Instance); } @@ -24,7 +25,7 @@ cmd_whowas::cmd_whowas(InspIRCd* Instance) : command_t(Instance, "WHOWAS", 0, 1) { syntax = "{,}"; - timer = new MaintainTimer(Instance, 3600); + timer = new WhoWasMaintainTimer(Instance, 3600); Instance->Timers->AddTimer(timer); } @@ -36,7 +37,7 @@ CmdResult cmd_whowas::Handle (const char** parameters, int pcnt, userrec* user) user->WriteServ("421 %s %s :This command has been disabled.",user->nick,command.c_str()); return CMD_FAILURE; } - + whowas_users::iterator i = whowas.find(parameters[0]); if (i == whowas.end()) @@ -126,7 +127,8 @@ void cmd_whowas::GetStats(Extensible* ext) whowas_bytes += (sizeof(whowas_set) + ( sizeof(WhoWasGroup) * n->size() ) ); } } - ext->Extend("stats", std::string("Whowas(MAPSETS) " +ConvToStr(whowas_size)+" ("+ConvToStr(whowas_bytes)+" bytes)").c_str()); + stats.assign("Whowas(MAPSETS) " +ConvToStr(whowas_size)+" ("+ConvToStr(whowas_bytes)+" bytes)"); + ext->Extend("stats", stats.c_str()); } void cmd_whowas::AddToWhoWas(userrec* user) @@ -153,16 +155,18 @@ void cmd_whowas::AddToWhoWas(userrec* user) if (iter != whowas.end()) { whowas_set* n = (whowas_set*)iter->second; + if (n->size()) { while (n->begin() != n->end()) { WhoWasGroup *a = *(n->begin()); - DELETE(a); + delete a; n->pop_front(); } } - DELETE(n); + + delete n; whowas.erase(iter); } whowas_fifo.pop_front(); @@ -177,7 +181,7 @@ void cmd_whowas::AddToWhoWas(userrec* user) if ((int)(group->size()) > ServerInstance->Config->WhoWasGroupSize) { WhoWasGroup *a = (WhoWasGroup*)*(group->begin()); - DELETE(a); + delete a; group->pop_front(); } } @@ -199,24 +203,28 @@ void cmd_whowas::PruneWhoWas(time_t t) if (fifosize > maxgroups || whowas_fifo[0].first < t - maxkeep) { iter = whowas.find(whowas_fifo[0].second); + /* hopefully redundant integrity check, but added while debugging r6216 */ if (iter == whowas.end()) { /* this should never happen, if it does maps are corrupt */ - ServerInstance->Log(DEBUG, "BUG: Whowas maps got corrupted! (1)"); + ServerInstance->Log(DEFAULT, "BUG: Whowas maps got corrupted! (1)"); return; } + whowas_set* n = (whowas_set*)iter->second; + if (n->size()) { while (n->begin() != n->end()) { WhoWasGroup *a = *(n->begin()); - DELETE(a); + delete a; n->pop_front(); } } - DELETE(n); + + delete n; whowas.erase(iter); whowas_fifo.pop_front(); } @@ -233,7 +241,7 @@ void cmd_whowas::PruneWhoWas(time_t t) if (iter == whowas.end()) { /* this should never happen, if it does maps are corrupt */ - ServerInstance->Log(DEBUG, "BUG: Whowas maps got corrupted! (2)"); + ServerInstance->Log(DEFAULT, "BUG: Whowas maps got corrupted! (2)"); return; } whowas_set* n = (whowas_set*)iter->second; @@ -243,7 +251,7 @@ void cmd_whowas::PruneWhoWas(time_t t) while (n->begin() != n->end() && nickcount > groupsize) { WhoWasGroup *a = *(n->begin()); - DELETE(a); + delete a; n->pop_front(); nickcount--; } @@ -262,7 +270,7 @@ void cmd_whowas::MaintainWhoWas(time_t t) while ((n->begin() != n->end()) && ((*n->begin())->signon < t - ServerInstance->Config->WhoWasMaxKeep)) { WhoWasGroup *a = *(n->begin()); - DELETE(a); + delete a; n->erase(n->begin()); } } @@ -281,24 +289,28 @@ cmd_whowas::~cmd_whowas() while ((fifosize = (int)whowas_fifo.size()) > 0) { iter = whowas.find(whowas_fifo[0].second); + /* hopefully redundant integrity check, but added while debugging r6216 */ if (iter == whowas.end()) { /* this should never happen, if it does maps are corrupt */ - ServerInstance->Log(DEBUG, "BUG: Whowas maps got corrupted! (3)"); + ServerInstance->Log(DEFAULT, "BUG: Whowas maps got corrupted! (3)"); return; } + whowas_set* n = (whowas_set*)iter->second; + if (n->size()) { while (n->begin() != n->end()) { WhoWasGroup *a = *(n->begin()); - DELETE(a); + delete a; n->pop_front(); } } - DELETE(n); + + delete n; whowas.erase(iter); whowas_fifo.pop_front(); } @@ -326,7 +338,7 @@ WhoWasGroup::~WhoWasGroup() } /* every hour, run this function which removes all entries older than Config->WhoWasMaxKeep */ -void MaintainTimer::Tick(time_t t) +void WhoWasMaintainTimer::Tick(time_t t) { command_t* whowas_command = ServerInstance->Parser->GetHandler("WHOWAS"); if (whowas_command)