diff --git a/src/DeadlockDetect.cpp b/src/DeadlockDetect.cpp index c774c9dce..e699e0c84 100644 --- a/src/DeadlockDetect.cpp +++ b/src/DeadlockDetect.cpp @@ -31,8 +31,10 @@ cDeadlockDetect::cDeadlockDetect(void) : -bool cDeadlockDetect::Start(void) +bool cDeadlockDetect::Start(int a_IntervalSec) { + m_IntervalSec = a_IntervalSec; + // Read the initial world data: class cFillIn : public cWorldListCallback @@ -115,7 +117,7 @@ void cDeadlockDetect::CheckWorldAge(const AString & a_WorldName, Int64 a_Age) if (itr->second.m_Age == a_Age) { itr->second.m_NumCyclesSame += 1; - if (itr->second.m_NumCyclesSame > NUM_CYCLES_LIMIT) + if (itr->second.m_NumCyclesSame > (1000 * m_IntervalSec) / CYCLE_MILLISECONDS) { DeadlockDetected(); return; diff --git a/src/DeadlockDetect.h b/src/DeadlockDetect.h index 2559c3fff..cb2309169 100644 --- a/src/DeadlockDetect.h +++ b/src/DeadlockDetect.h @@ -29,7 +29,7 @@ public: cDeadlockDetect(void); /// Starts the detection. Hides cIsThread's Start, because we need some initialization - bool Start(void); + bool Start(int a_IntervalSec); protected: struct sWorldAge @@ -46,6 +46,9 @@ protected: WorldAges m_WorldAges; + /// Number of secods for which the ages must be the same for the detection to trigger + int m_IntervalSec; + // cIsThread overrides: virtual void Execute(void) override; diff --git a/src/Root.cpp b/src/Root.cpp index 4a6abaf37..f15bfd366 100644 --- a/src/Root.cpp +++ b/src/Root.cpp @@ -165,14 +165,17 @@ void cRoot::Start(void) LOGD("Starting Authenticator..."); m_Authenticator.Start(IniFile); - IniFile.WriteFile("settings.ini"); - LOGD("Starting worlds..."); StartWorlds(); - LOGD("Starting deadlock detector..."); - dd.Start(); + if (IniFile.GetValueSetB("DeadlockDetect", "Enabled", true)) + { + LOGD("Starting deadlock detector..."); + dd.Start(IniFile.GetValueSetI("DeadlockDetect", "IntervalSec", 20)); + } + IniFile.WriteFile("settings.ini"); + LOGD("Finalising startup..."); m_Server->Start();