diff options
author | Chris Wilson <chris+github@qwirx.com> | 2006-11-13 15:56:09 +0000 |
---|---|---|
committer | Chris Wilson <chris+github@qwirx.com> | 2006-11-13 15:56:09 +0000 |
commit | 61fce5d877e6388c4422950dcabf6b4bd6d39624 (patch) | |
tree | ffee7b2cee24765a17f7d1ed48c67920f50aa60f /lib/common | |
parent | 826c2675ec1c2cb60e0ef1842c7a5ff7a548eeaa (diff) |
Use a static pointer rather than a static object, to allow it to be
freed in Timers::Cleanup, removing a reported memory leak (refs #9)
Diffstat (limited to 'lib/common')
-rw-r--r-- | lib/common/Timer.cpp | 39 | ||||
-rw-r--r-- | lib/common/Timer.h | 3 |
2 files changed, 20 insertions, 22 deletions
diff --git a/lib/common/Timer.cpp b/lib/common/Timer.cpp index e05affb2..cfeca3c5 100644 --- a/lib/common/Timer.cpp +++ b/lib/common/Timer.cpp @@ -16,8 +16,7 @@ #include "MemLeakFindOn.h" -std::vector<Timer*> Timers::sTimers; -bool Timers::sInitialised = false; +std::vector<Timer*>* Timers::spTimers = NULL; // -------------------------------------------------------------------------- // @@ -42,7 +41,7 @@ static void TimerSigHandler(int iUnused) // -------------------------------------------------------------------------- void Timers::Init() { - ASSERT(!sInitialised); + ASSERT(!spTimers); #ifdef PLATFORM_CYGWIN ASSERT(::signal(SIGALRM, TimerSigHandler) == 0); @@ -54,7 +53,7 @@ void Timers::Init() ASSERT(::signal(SIGALRM, TimerSigHandler) == 0); #endif // PLATFORM_CYGWIN - sInitialised = true; + spTimers = new std::vector<Timer*>; } // -------------------------------------------------------------------------- @@ -67,7 +66,7 @@ void Timers::Init() // -------------------------------------------------------------------------- void Timers::Cleanup() { - ASSERT(sInitialised); + ASSERT(spTimers); #ifdef PLATFORM_CYGWIN ASSERT(::signal(SIGALRM, NULL) == TimerSigHandler); @@ -79,9 +78,9 @@ void Timers::Cleanup() ASSERT(::signal(SIGALRM, NULL) == TimerSigHandler); #endif // PLATFORM_CYGWIN - sTimers.clear(); - - sInitialised = false; + spTimers->clear(); + delete spTimers; + spTimers = NULL; } // -------------------------------------------------------------------------- @@ -94,8 +93,8 @@ void Timers::Cleanup() // -------------------------------------------------------------------------- void Timers::Add(Timer& rTimer) { - ASSERT(sInitialised); - sTimers.push_back(&rTimer); + ASSERT(spTimers); + spTimers->push_back(&rTimer); Reschedule(); } @@ -110,18 +109,18 @@ void Timers::Add(Timer& rTimer) // -------------------------------------------------------------------------- void Timers::Remove(Timer& rTimer) { - ASSERT(sInitialised); + ASSERT(spTimers); bool restart = true; while (restart) { restart = false; - for (std::vector<Timer*>::iterator i = sTimers.begin(); - i != sTimers.end(); i++) + for (std::vector<Timer*>::iterator i = spTimers->begin(); + i != spTimers->end(); i++) { if (&rTimer == *i) { - sTimers.erase(i); + spTimers->erase(i); restart = true; break; } @@ -141,13 +140,13 @@ void Timers::Remove(Timer& rTimer) // -------------------------------------------------------------------------- void Timers::Reschedule() { - ASSERT(sInitialised); + ASSERT(spTimers); box_time_t timeNow = GetCurrentBoxTime(); box_time_t timeToNextEvent = 0; - for (std::vector<Timer*>::iterator i = sTimers.begin(); - i != sTimers.end(); i++) + for (std::vector<Timer*>::iterator i = spTimers->begin(); + i != spTimers->end(); i++) { Timer& rTimer = **i; ASSERT(!rTimer.HasExpired()); @@ -192,11 +191,11 @@ void Timers::Reschedule() // -------------------------------------------------------------------------- void Timers::Signal() { - ASSERT(sInitialised); + ASSERT(spTimers); box_time_t timeNow = GetCurrentBoxTime(); - std::vector<Timer*> timersCopy = sTimers; + std::vector<Timer*> timersCopy = *spTimers; for (std::vector<Timer*>::iterator i = timersCopy.begin(); i != timersCopy.end(); i++) @@ -211,7 +210,7 @@ void Timers::Signal() rTimer.OnExpire(); } } - + Reschedule(); } diff --git a/lib/common/Timer.h b/lib/common/Timer.h index 6e4a5952..e0eb34db 100644 --- a/lib/common/Timer.h +++ b/lib/common/Timer.h @@ -48,8 +48,7 @@ private: class Timers { private: - static std::vector<Timer*> sTimers; - static bool sInitialised; + static std::vector<Timer*>* spTimers; static void Reschedule(); public: |