cec: lock in SyncedBuffer
[deb_libcec.git] / src / lib / adapter / USBCECAdapterCommunication.cpp
index 1b768539faeb21cd02d8c598ed2c7384f872e09a..95c46946c70fd5638c4add7688e63e83929ec717 100644 (file)
@@ -201,6 +201,7 @@ void *CUSBCECAdapterCommunication::Process(void)
   m_messageProcessor->CreateThread();
 
   cec_command command;
+  command.Clear();
   bool bCommandReceived(false);
   while (!IsStopped())
   {
@@ -319,7 +320,7 @@ bool CUSBCECAdapterCommunication::Read(CCECAdapterMessage &msg, uint32_t iTimeou
     if (iTimeout == 0 || !m_rcvCondition.Wait(m_mutex, m_bHasData, iTimeout))
       return false;
     m_inBuffer.Pop(buf);
-    m_bHasData = m_inBuffer.Size() > 0;
+    m_bHasData = !m_inBuffer.IsEmpty();
   }
 
   if (buf)
@@ -390,6 +391,7 @@ bool CUSBCECAdapterCommunication::ParseMessage(const CCECAdapterMessage &msg)
   if (msg.IsEmpty())
     return bEom;
 
+  CLockObject adapterLock(m_mutex);
   switch(msg.Message())
   {
   case MSGCODE_FRAME_START:
@@ -662,7 +664,7 @@ void CUSBCECAdapterCommunication::AddData(uint8_t *data, size_t iLen)
       m_bGotStart = false;
       m_bNextIsEscaped = false;
       m_bHasData = true;
-      m_rcvCondition.Signal();
+      m_rcvCondition.Broadcast();
     }
     else if (m_bNextIsEscaped)
     {