]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/timer.cpp
Add SerializeFormat for easier metadata formatting
[user/henk/code/inspircd.git] / src / timer.cpp
index ca7534a7c7409759d42808258c3162db706f019a..8dab38392aea1a080eea7acf2d0ba060fc2f8529 100644 (file)
@@ -2,8 +2,8 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
- * See: http://www.inspircd.org/wiki/index.php/Credits
+ *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * See: http://wiki.inspircd.org/Credits
  *
  * This program is free but copyrighted software; see
  *            the file COPYING for details.
@@ -11,7 +11,7 @@
  * ---------------------------------------------------
  */
 
-/* $Core: libIRCDtimer */
+/* $Core */
 
 #include "inspircd.h"
 #include "timer.h"
@@ -20,6 +20,12 @@ TimerManager::TimerManager(InspIRCd* Instance) : ServerInstance(Instance)
 {
 }
 
+TimerManager::~TimerManager()
+{
+       for(std::vector<Timer *>::iterator i = Timers.begin(); i != Timers.end(); i++)
+               delete *i;
+}
+
 void TimerManager::TickTimers(time_t TIME)
 {
        while ((Timers.size()) && (TIME > (*Timers.begin())->GetTimer()))
@@ -27,6 +33,9 @@ void TimerManager::TickTimers(time_t TIME)
                std::vector<Timer *>::iterator i = Timers.begin();
                Timer *t = (*i);
 
+               // Probable fix: move vector manipulation to *before* we modify the vector.
+               Timers.erase(i);
+
                t->Tick(TIME);
                if (t->GetRepeat())
                {
@@ -35,8 +44,6 @@ void TimerManager::TickTimers(time_t TIME)
                }
                else
                        delete t;
-
-               Timers.erase(i);
        }
 }
 
@@ -61,5 +68,3 @@ bool TimerManager::TimerComparison( Timer *one, Timer *two)
 {
        return (one->GetTimer()) < (two->GetTimer());
 }
-
-