From: Lars Op den Kamp Date: Sun, 26 Feb 2012 22:17:21 +0000 (+0100) Subject: cec: added a timeout to StopThread() X-Git-Tag: upstream/2.2.0~1^2~33^2~31 X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=78d138bd56ecc5a5c2184415af8dd1778dd71337;p=deb_libcec.git cec: added a timeout to StopThread() --- diff --git a/src/lib/platform/threads/threads.h b/src/lib/platform/threads/threads.h index 0efebdc..c730da8 100644 --- a/src/lib/platform/threads/threads.h +++ b/src/lib/platform/threads/threads.h @@ -103,7 +103,11 @@ namespace PLATFORM return bReturn; } - virtual bool StopThread(bool bWaitForExit = true) + /*! + * @brief Stop the thread + * @param iWaitMs negative = don't wait, 0 = infinite, or the amount of ms to wait + */ + virtual bool StopThread(int iWaitMs = 5000) { bool bReturn(true); bool bRunning(false); @@ -113,12 +117,17 @@ namespace PLATFORM m_bStop = true; } - if (bRunning && bWaitForExit) + if (bRunning && iWaitMs >= 0) { - void *retVal = NULL; - bReturn = ThreadsWait(m_thread, &retVal); + CLockObject lock(m_threadMutex); + bReturn = m_threadCondition.Wait(m_threadMutex, m_bStopped, iWaitMs); + } + else + { + bReturn = true; } - return true; + + return bReturn; } virtual bool Sleep(uint32_t iTimeout)