From f6637869be45466f13bfe0f5ddcfbaea38e0abc7 Mon Sep 17 00:00:00 2001 From: Tom Early Date: Mon, 6 Jul 2020 03:41:45 -0700 Subject: [PATCH] rapid, polite shutdown --- src/cdmriddir.cpp | 5 +++-- src/cgatekeeper.cpp | 4 +++- src/cprotocol.cpp | 2 +- src/creflector.cpp | 3 ++- src/cysfnodedir.cpp | 5 +++-- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/cdmriddir.cpp b/src/cdmriddir.cpp index eff0973..1b2067e 100644 --- a/src/cdmriddir.cpp +++ b/src/cdmriddir.cpp @@ -85,8 +85,9 @@ void CDmridDir::Thread(CDmridDir *This) { while (This->keep_running) { - // Wait 30 seconds - CTimePoint::TaskSleepFor(DMRIDDB_REFRESH_RATE * 60000); + // Wait DMRIDDB_REFRESH_RATE minutes + for (int i=0; i<30*DMRIDDB_REFRESH_RATE && This->keep_running; i++) + CTimePoint::TaskSleepFor(2000); // have lists files changed ? if ( This->NeedReload() ) diff --git a/src/cgatekeeper.cpp b/src/cgatekeeper.cpp index a7fecc6..93b0213 100644 --- a/src/cgatekeeper.cpp +++ b/src/cgatekeeper.cpp @@ -51,6 +51,7 @@ CGateKeeper::~CGateKeeper() { m_pThread->join(); delete m_pThread; + m_pThread = NULL; } } @@ -180,7 +181,8 @@ void CGateKeeper::Thread(CGateKeeper *This) while (This->keep_running) { // Wait 30 seconds - CTimePoint::TaskSleepFor(30000); + for (int i=0; i<15 && This->keep_running; i++) + CTimePoint::TaskSleepFor(2000); // have lists files changed ? if ( This->m_NodeWhiteList.NeedReload() ) diff --git a/src/cprotocol.cpp b/src/cprotocol.cpp index b6aee24..d5d34f3 100644 --- a/src/cprotocol.cpp +++ b/src/cprotocol.cpp @@ -118,7 +118,7 @@ void CProtocol::Thread(CProtocol *This) void CProtocol::Close(void) { - keep_running = true; + keep_running = false; if ( m_pThread != NULL ) { m_pThread->join(); diff --git a/src/creflector.cpp b/src/creflector.cpp index f86c2f7..45c6a79 100644 --- a/src/creflector.cpp +++ b/src/creflector.cpp @@ -405,7 +405,8 @@ void CReflector::XmlReportThread(CReflector *This) #endif // and wait a bit - CTimePoint::TaskSleepFor(XML_UPDATE_PERIOD * 1000); + for (int i=0; i< XML_UPDATE_PERIOD && This->keep_running; i++) + CTimePoint::TaskSleepFor(1000); } } diff --git a/src/cysfnodedir.cpp b/src/cysfnodedir.cpp index aa11e5d..b068133 100644 --- a/src/cysfnodedir.cpp +++ b/src/cysfnodedir.cpp @@ -84,8 +84,9 @@ void CYsfNodeDir::Thread(CYsfNodeDir *This) { while (This->keep_running) { - // Wait 30 seconds - CTimePoint::TaskSleepFor(YSFNODEDB_REFRESH_RATE * 60000); + // Wait YSFNODEDB_REFRESH_RATE minutes + for (int i=0; i<30*YSFNODEDB_REFRESH_RATE && This->keep_running; i++) + CTimePoint::TaskSleepFor(2000); // have lists files changed ? if ( This->NeedReload() )