X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Ftimer.cpp;h=14e61216885f42f92b62d2794a32a092d53e7aa2;hb=59b1a8955142935b02af6446005ab47fc7c3fc8c;hp=31c2c6a1397b1270c4f46dc08e94df15648eb1de;hpb=6279a01bf5b6da48bedfdfe2d39dde69e46ae401;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/timer.cpp b/src/timer.cpp index 31c2c6a13..14e612168 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -30,7 +30,6 @@ using namespace std; #include #include #include -#include "timer.h" #include "inspircd.h" #include "inspircd_io.h" #include "inspstring.h" @@ -50,42 +49,63 @@ void TickTimers(time_t TIME) if (found != Timers.end()) { - log(DEBUG,"timer.cpp: There are timers to trigger"); timergroup* x = found->second; /* * There are pending timers to trigger */ for (timergroup::iterator y = x->begin(); y != x->end(); y++) { - log(DEBUG,"timer.cpp: Triggering a timer"); InspTimer* n = (InspTimer*)*y; n->Tick(TIME); - log(DEBUG,"timer.cpp: TICK!"); delete n; } - log(DEBUG,"timer.cpp: Done triggering timers, tidying up"); Timers.erase(found); delete x; } } +/* + * Because some muppets may do odd things, and their ircd may lock up due + * to crappy 3rd party modules, or they may change their system time a bit, + * this accounts for shifts of up to 120 secs by looking behind for missed + * timers and executing them. This is only executed once every 5 secs. + * If you move your clock BACK, and your timers move further ahead as a result, + * then tough titty you'll just have to wait. + */ +void TickMissedTimers(time_t TIME) +{ + for (time_t n = TIME-1; n > TIME-120; n--) + { + timerlist::iterator found = Timers.find(n); + if (found != Timers.end()) + { + timergroup* x = found->second; + for (timergroup::iterator y = x->begin(); y != x->end(); y++) + { + InspTimer* z = (InspTimer*)*y; + z->Tick(TIME); + delete z; + } + + Timers.erase(found); + delete x; + } + } +} + void AddTimer(InspTimer* T) { - log(DEBUG,"timer.cpp: Adding timer"); - timergroup* x = NULL; timerlist::iterator found = Timers.find(T->GetTimer()); if (found != Timers.end()) { - log(DEBUG,"timer.cpp: Add timer to existing group"); x = found->second; } else { - log(DEBUG,"timer.cpp: Add timer to new group"); x = new timergroup; Timers[T->GetTimer()] = x; }