X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fplatform%2Fthreads%2Fmutex.h;h=e8481012773e428561c0e1f7c7652117926aa421;hb=f2d82f4b45f2af72597de2726febf12b6d4c3db7;hp=bb4e006e331b373dfacd585eb682e53e5f47f697;hpb=15d01ae0b30a685aa5ca07407231dbc7c4ee8e58;p=deb_libcec.git diff --git a/src/lib/platform/threads/mutex.h b/src/lib/platform/threads/mutex.h index bb4e006..e848101 100644 --- a/src/lib/platform/threads/mutex.h +++ b/src/lib/platform/threads/mutex.h @@ -39,8 +39,6 @@ #include "../posix/os-threads.h" #endif -#include "../util/timeutils.h" - namespace PLATFORM { class PreventCopy @@ -226,46 +224,25 @@ namespace PLATFORM class CCondition : public PreventCopy { public: - inline CCondition(void) : - m_bPredicate(false), - m_iWaitingThreads(0) {} + inline CCondition(void) {} inline ~CCondition(void) { - Broadcast(); + m_condition.Broadcast(); } - void Broadcast(void) + inline void Broadcast(void) { - Set(true); m_condition.Broadcast(); } - void Signal(void) + inline void Signal(void) { - Set(false); m_condition.Signal(); } - bool Wait(CMutex &mutex, uint32_t iTimeout = 0) + inline bool Wait(CMutex &mutex, uint32_t iTimeout = 0) { - { - CLockObject lock(m_mutex); - ++m_iWaitingThreads; - } - - if (iTimeout > 0) - { - CTimeout timeout(iTimeout); - while (!m_bPredicate && timeout.TimeLeft() > 0) - m_condition.Wait(mutex.m_mutex, timeout.TimeLeft()); - } - else - { - while (!m_bPredicate) - m_condition.Wait(mutex.m_mutex, 0); - } - - return ResetAndReturn(); + return m_condition.Wait(mutex.m_mutex, iTimeout); } static void Sleep(uint32_t iTimeout) @@ -277,26 +254,6 @@ namespace PLATFORM } private: - void Set(bool bBroadcast = false) - { - CLockObject lock(m_mutex); - m_bPredicate = true; - m_bBroadcast = bBroadcast; - } - - bool ResetAndReturn(void) - { - CLockObject lock(m_mutex); - bool bReturn(m_bPredicate); - if (bReturn && (--m_iWaitingThreads == 0 || !m_bBroadcast)) - m_bPredicate = false; - return bReturn; - } - - CMutex m_mutex; CConditionImpl m_condition; - volatile bool m_bPredicate; - volatile bool m_bBroadcast; - unsigned int m_iWaitingThreads; }; }