1
0
Fork 0

DeadlockDetect now uses sleep instead of timed-wait semaphores.

The semaphores' timed-wait still has issues on Linux, it's just easier to use cSleep instead.
This commit is contained in:
madmaxoft 2013-08-19 22:35:27 +02:00
parent fdbe835131
commit 2d7c72f1b7
2 changed files with 5 additions and 18 deletions

View File

@ -13,10 +13,10 @@
/// Number of milliseconds per cycle
const int CYCLE_MILLISECONDS = 500;
const int CYCLE_MILLISECONDS = 100;
/// When the number of cycles for the same world age hits this value, it is considered a deadlock
const int NUM_CYCLES_LIMIT = 40; // 40 = twenty seconds
const int NUM_CYCLES_LIMIT = 200; // 200 = twenty seconds
@ -60,20 +60,10 @@ bool cDeadlockDetect::Start(void)
void cDeadlockDetect::Stop(void)
{
m_EvtTerminate.Set();
super::Stop();
}
void cDeadlockDetect::Execute(void)
{
// Loop until the event is signalled
while (m_EvtTerminate.Wait(CYCLE_MILLISECONDS) == cEvent::wrTimeout)
while (!m_ShouldTerminate)
{
// Check the world ages:
class cChecker :
@ -95,6 +85,8 @@ void cDeadlockDetect::Execute(void)
}
} Checker(this);
cRoot::Get()->ForEachWorld(Checker);
cSleep::MilliSleep(CYCLE_MILLISECONDS);
} // while (should run)
}

View File

@ -31,9 +31,6 @@ public:
/// Starts the detection. Hides cIsThread's Start, because we need some initialization
bool Start(void);
/// Stops the detection. Hides cIsThread's Stop, because we need to signal m_EvtTerminate
void Stop(void);
protected:
struct sWorldAge
{
@ -49,8 +46,6 @@ protected:
WorldAges m_WorldAges;
cEvent m_EvtTerminate;
// cIsThread overrides:
virtual void Execute(void) override;