cec: send the physical address only once. keep a write lock when polling devices
authorLars Op den Kamp <lars@opdenkamp.eu>
Sun, 4 Dec 2011 19:05:03 +0000 (20:05 +0100)
committerLars Op den Kamp <lars@opdenkamp.eu>
Sun, 4 Dec 2011 19:05:03 +0000 (20:05 +0100)
src/lib/devices/CECBusDevice.cpp

index 52f0c207c6390701459a2239188cb924891f194b..340602c3a22cb06043580c595ac27bc9e87231a5 100644 (file)
@@ -730,6 +730,10 @@ bool CCECBusDevice::TransmitOSDString(cec_logical_address dest, cec_display_cont
 bool CCECBusDevice::TransmitPhysicalAddress(void)
 {
   CLockObject lock(&m_writeMutex);
+
+  if (m_iPhysicalAddress = 0xffff)
+    return false;
+
   CStdString strLog;
   strLog.Format("<< %s (%X) -> broadcast (F): physical adddress %4x", GetLogicalAddressName(), m_iLogicalAddress, m_iPhysicalAddress);
   AddLog(CEC_LOG_NOTICE, strLog.c_str());
@@ -750,6 +754,8 @@ bool CCECBusDevice::TransmitPoll(cec_logical_address dest)
   if (dest == CECDEVICE_UNKNOWN)
     dest = m_iLogicalAddress;
 
+  CLockObject lock(&m_writeMutex);
+
   CStdString strLog;
   strLog.Format("<< %s (%X) -> %s (%X): POLL", GetLogicalAddressName(), m_iLogicalAddress, ToString(dest), dest);
   AddLog(CEC_LOG_NOTICE, strLog.c_str());
@@ -764,12 +770,8 @@ bool CCECBusDevice::TransmitPoll(cec_logical_address dest)
   }
 
   AddLog(CEC_LOG_DEBUG, bReturn ? ">> POLL sent" : ">> POLL not sent");
-
   if (bReturn)
-  {
-    CLockObject lock(&m_writeMutex);
     m_iLastActive = GetTimeMs();
-  }
 
   return bReturn;
 }