cec: fix 104125dc8316fb58253c34f417ded1e85b22c9f8
authorLars Op den Kamp <lars@opdenkamp.eu>
Sat, 11 Feb 2012 20:28:58 +0000 (21:28 +0100)
committerLars Op den Kamp <lars@opdenkamp.eu>
Sat, 11 Feb 2012 20:28:58 +0000 (21:28 +0100)
src/lib/devices/CECBusDevice.cpp
src/lib/implementations/CECCommandHandler.cpp

index ed11d0c325e33d5d8d2d60d9e9b93a0fc6db6c75..0fc486f220fd9244ef14c5672bb1fcf8f166e111 100644 (file)
@@ -605,42 +605,44 @@ void CCECBusDevice::MarkReady(void)
 
 bool CCECBusDevice::ReplaceHandler(bool bActivateSource /* = true */)
 {
-  CTryLockObject lock(m_mutex);
-  if (!lock.IsLocked())
-    return false;
+  bool bInitHandler(false);
+  {
+    CTryLockObject lock(m_mutex);
+    if (!lock.IsLocked())
+      return false;
 
-  CLockObject handlerLock(m_handlerMutex);
-  if (m_iHandlerUseCount > 0)
-    return false;
+    CLockObject handlerLock(m_handlerMutex);
+    if (m_iHandlerUseCount > 0)
+      return false;
 
-  bool bInitHandler(false);
-  MarkBusy();
+    MarkBusy();
 
-  if (m_vendor != m_handler->GetVendorId())
-  {
-    if (CCECCommandHandler::HasSpecificHandler(m_vendor))
+    if (m_vendor != m_handler->GetVendorId())
     {
-      CLibCEC::AddLog(CEC_LOG_DEBUG, "replacing the command handler for device '%s' (%x)", GetLogicalAddressName(), GetLogicalAddress());
-      delete m_handler;
-
-      switch (m_vendor)
+      if (CCECCommandHandler::HasSpecificHandler(m_vendor))
       {
-      case CEC_VENDOR_SAMSUNG:
-        m_handler = new CANCommandHandler(this);
-        break;
-      case CEC_VENDOR_LG:
-        m_handler = new CSLCommandHandler(this);
-        break;
-      case CEC_VENDOR_PANASONIC:
-        m_handler = new CVLCommandHandler(this);
-        break;
-      default:
-        m_handler = new CCECCommandHandler(this);
-        break;
+        CLibCEC::AddLog(CEC_LOG_DEBUG, "replacing the command handler for device '%s' (%x)", GetLogicalAddressName(), GetLogicalAddress());
+        delete m_handler;
+
+        switch (m_vendor)
+        {
+        case CEC_VENDOR_SAMSUNG:
+          m_handler = new CANCommandHandler(this);
+          break;
+        case CEC_VENDOR_LG:
+          m_handler = new CSLCommandHandler(this);
+          break;
+        case CEC_VENDOR_PANASONIC:
+          m_handler = new CVLCommandHandler(this);
+          break;
+        default:
+          m_handler = new CCECCommandHandler(this);
+          break;
+        }
+
+        m_handler->SetVendorId(m_vendor);
+        bInitHandler = true;
       }
-
-      m_handler->SetVendorId(m_vendor);
-      bInitHandler = true;
     }
   }
 
index 9f9c882336e6ebcd16046600255fe880169a8058..8c1895894253e0d5e2210da3d9b1e78bf5797205 100644 (file)
@@ -962,8 +962,8 @@ bool CCECCommandHandler::Transmit(cec_command &command, bool bExpectResponse /*
         CLibCEC::AddLog(CEC_LOG_DEBUG, "command transmitted");
         if (bExpectResponse)
           bReturn = m_condition.Wait(m_receiveMutex, m_bRcvSignal, m_iTransmitWait);
-        if (bReturn)
-          m_bRcvSignal = false;
+        m_bRcvSignal = false;
+        CLibCEC::AddLog(CEC_LOG_DEBUG, bReturn ? "expected response received" : "expected response not received");
       }
     }
   }