From 2d7c72f1b705560822b15f11208f1e5d6a735d86 Mon Sep 17 00:00:00 2001 From: madmaxoft Date: Mon, 19 Aug 2013 22:35:27 +0200 Subject: 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. --- source/DeadlockDetect.cpp | 18 +++++------------- source/DeadlockDetect.h | 5 ----- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/source/DeadlockDetect.cpp b/source/DeadlockDetect.cpp index 960038f81..de9a32d39 100644 --- a/source/DeadlockDetect.cpp +++ b/source/DeadlockDetect.cpp @@ -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) } diff --git a/source/DeadlockDetect.h b/source/DeadlockDetect.h index bbd76826a..2559c3fff 100644 --- a/source/DeadlockDetect.h +++ b/source/DeadlockDetect.h @@ -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; -- cgit v1.2.3