X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fplatform%2Fthreads%2Fmutex.h;h=6fc57d140bcdf183a0745fa7d52d3b54a23c00c0;hb=d968b075dd7f0a4a96175045dbf4e20b7aa32872;hp=5a9ae135ee9858548c937b2faf395224fa44d7bb;hpb=de49d80bb32eef6589d7d3a2413aa684a39b7e34;p=deb_libcec.git diff --git a/src/lib/platform/threads/mutex.h b/src/lib/platform/threads/mutex.h index 5a9ae13..6fc57d1 100644 --- a/src/lib/platform/threads/mutex.h +++ b/src/lib/platform/threads/mutex.h @@ -51,7 +51,7 @@ namespace PLATFORM private: inline PreventCopy(const PreventCopy &c) { *this = c; } - inline PreventCopy &operator=(const PreventCopy &c){ *this = c; return *this; } + inline PreventCopy &operator=(const PreventCopy & UNUSED(c)){ return *this; } }; template @@ -257,18 +257,19 @@ namespace PLATFORM if (iTimeout == 0) return Wait(mutex, predicate); - bool bReturn(true); - if (!predicate) + if (predicate) + return true; + + bool bReturn(false); + bool bBreak(false); + CTimeout timeout(iTimeout); + uint32_t iMsLeft(0); + + while (!bReturn && !bBreak) { - CTimeout timeout(iTimeout); - uint32_t iMsLeft(0); - bReturn = false; - while (!bReturn) - { - iMsLeft = timeout.TimeLeft(); - if ((bReturn = iMsLeft == 0 || predicate) == false) - m_condition.Wait(mutex.m_mutex, iMsLeft); - } + iMsLeft = timeout.TimeLeft(); + if ((bReturn = predicate) == false && (bBreak = iMsLeft == 0) == false) + m_condition.Wait(mutex.m_mutex, iMsLeft); } return bReturn; } @@ -342,11 +343,11 @@ namespace PLATFORM return bReturn; } - volatile bool m_bSignaled; - CCondition m_condition; - CMutex m_mutex; - volatile bool m_bBroadcast; - unsigned int m_iWaitingThreads; - bool m_bAutoReset; + volatile bool m_bSignaled; + CCondition m_condition; + CMutex m_mutex; + volatile bool m_bBroadcast; + unsigned int m_iWaitingThreads; + bool m_bAutoReset; }; }