[Box Backup-commit] COMMIT r1154 - box/chris/merge/lib/common
boxbackup-dev@fluffy.co.uk
boxbackup-dev@fluffy.co.uk
Mon, 13 Nov 2006 15:56:09 +0000
Author: chris
Date: 2006-11-13 15:56:09 +0000 (Mon, 13 Nov 2006)
New Revision: 1154
Modified:
box/chris/merge/lib/common/Timer.cpp
box/chris/merge/lib/common/Timer.h
Log:
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)
Modified: box/chris/merge/lib/common/Timer.cpp
===================================================================
--- box/chris/merge/lib/common/Timer.cpp 2006-11-13 15:54:49 UTC (rev 1153)
+++ box/chris/merge/lib/common/Timer.cpp 2006-11-13 15:56:09 UTC (rev 1154)
@@ -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 @@
// --------------------------------------------------------------------------
void Timers::Init()
{
- ASSERT(!sInitialised);
+ ASSERT(!spTimers);
#ifdef PLATFORM_CYGWIN
ASSERT(::signal(SIGALRM, TimerSigHandler) == 0);
@@ -54,7 +53,7 @@
ASSERT(::signal(SIGALRM, TimerSigHandler) == 0);
#endif // PLATFORM_CYGWIN
- sInitialised = true;
+ spTimers = new std::vector<Timer*>;
}
// --------------------------------------------------------------------------
@@ -67,7 +66,7 @@
// --------------------------------------------------------------------------
void Timers::Cleanup()
{
- ASSERT(sInitialised);
+ ASSERT(spTimers);
#ifdef PLATFORM_CYGWIN
ASSERT(::signal(SIGALRM, NULL) == TimerSigHandler);
@@ -79,9 +78,9 @@
ASSERT(::signal(SIGALRM, NULL) == TimerSigHandler);
#endif // PLATFORM_CYGWIN
- sTimers.clear();
-
- sInitialised = false;
+ spTimers->clear();
+ delete spTimers;
+ spTimers = NULL;
}
// --------------------------------------------------------------------------
@@ -94,8 +93,8 @@
// --------------------------------------------------------------------------
void Timers::Add(Timer& rTimer)
{
- ASSERT(sInitialised);
- sTimers.push_back(&rTimer);
+ ASSERT(spTimers);
+ spTimers->push_back(&rTimer);
Reschedule();
}
@@ -110,18 +109,18 @@
// --------------------------------------------------------------------------
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::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::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 @@
rTimer.OnExpire();
}
}
-
+
Reschedule();
}
Modified: box/chris/merge/lib/common/Timer.h
===================================================================
--- box/chris/merge/lib/common/Timer.h 2006-11-13 15:54:49 UTC (rev 1153)
+++ box/chris/merge/lib/common/Timer.h 2006-11-13 15:56:09 UTC (rev 1154)
@@ -48,8 +48,7 @@
class Timers
{
private:
- static std::vector<Timer*> sTimers;
- static bool sInitialised;
+ static std::vector<Timer*>* spTimers;
static void Reschedule();
public: