From ba427965a1ac1d555e292e577b990ecd467e3ca8 Mon Sep 17 00:00:00 2001 From: Lars Op den Kamp Date: Fri, 17 Feb 2012 11:14:08 +0100 Subject: [PATCH] cec: cleaned up CCECBusDevice::GetStatus() --- src/lib/devices/CECBusDevice.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/lib/devices/CECBusDevice.cpp b/src/lib/devices/CECBusDevice.cpp index a0d612e..3c39371 100644 --- a/src/lib/devices/CECBusDevice.cpp +++ b/src/lib/devices/CECBusDevice.cpp @@ -86,6 +86,7 @@ bool CCECBusDevice::HandleCommand(const cec_command &command) CLockObject lock(m_mutex); m_iLastActive = GetTimeMs(); + /* don't call GetStatus() here, just read the value with the mutex locked */ if (m_deviceStatus != CEC_DEVICE_STATUS_HANDLED_BY_LIBCEC) m_deviceStatus = CEC_DEVICE_STATUS_PRESENT; @@ -439,20 +440,27 @@ bool CCECBusDevice::NeedsPoll(void) cec_bus_device_status CCECBusDevice::GetStatus(bool bForcePoll /* = false */) { - CLockObject lock(m_mutex); - if (m_deviceStatus != CEC_DEVICE_STATUS_HANDLED_BY_LIBCEC && - (m_deviceStatus == CEC_DEVICE_STATUS_UNKNOWN || bForcePoll)) + cec_bus_device_status status(CEC_DEVICE_STATUS_UNKNOWN); + bool bNeedsPoll(false); + + { + CLockObject lock(m_mutex); + status = m_deviceStatus; + bNeedsPoll = (m_deviceStatus != CEC_DEVICE_STATUS_HANDLED_BY_LIBCEC && + (m_deviceStatus == CEC_DEVICE_STATUS_UNKNOWN || bForcePoll)); + } + + if (bNeedsPoll) { - lock.Unlock(); bool bPollAcked(false); - if (bForcePoll || NeedsPoll()) + if (bNeedsPoll || NeedsPoll()) bPollAcked = m_processor->PollDevice(m_iLogicalAddress); - lock.Lock(); - m_deviceStatus = bPollAcked ? CEC_DEVICE_STATUS_PRESENT : CEC_DEVICE_STATUS_NOT_PRESENT; + status = bPollAcked ? CEC_DEVICE_STATUS_PRESENT : CEC_DEVICE_STATUS_NOT_PRESENT; + SetDeviceStatus(status); } - return m_deviceStatus; + return status; } //@} -- 2.34.1