Skip to content

Commit 91f4498

Browse files
committed
Resolve Coverity issues
1 parent 7a8d57c commit 91f4498

File tree

1 file changed

+65
-54
lines changed

1 file changed

+65
-54
lines changed

HdmiCecSink/HdmiCecSinkImplementation.cpp

Lines changed: 65 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -601,45 +601,61 @@ namespace WPEFramework
601601
//=========================================== HdmiCecSinkImplementation =========================================
602602

603603
HdmiCecSinkImplementation::HdmiCecSinkImplementation()
604-
: smConnection(nullptr)
604+
: deviceList()
605+
, hdmiInputs()
606+
, m_currentActiveSource(-1)
607+
, m_numberOfDevices(0)
608+
, m_audioDevicePowerStatusRequested(false)
609+
, logicalAddressDeviceType("None")
610+
, cecSettingEnabled(true)
611+
, cecOTPSettingEnabled(true)
612+
, cecEnableStatus(false)
613+
, hdmiCecAudioDeviceConnected(false)
614+
, m_isHdmiInConnected(false)
615+
, m_numofHdmiInput(0)
616+
, m_deviceType(0)
617+
, m_logicalAddressAllocated(LogicalAddress::UNREGISTERED)
618+
, m_pollThread()
619+
, m_pollThreadState(POLL_THREAD_STATE_NONE)
620+
, m_pollNextState(POLL_THREAD_STATE_NONE)
621+
, m_pollThreadExit(false)
622+
, m_sleepTime(0)
623+
, m_sendKeyEventThreadExit(false)
624+
, m_sendKeyEventThreadRun(false)
625+
, m_isAudioStatusInfoUpdated(false)
626+
, m_audioStatusReceived(false)
627+
, m_audioStatusTimerStarted(false)
628+
, m_sendKeyEventThread()
629+
, m_video_latency(DEFAULT_VIDEO_LATENCY)
630+
, m_latency_flags(DEFAULT_LATENCY_FLAGS)
631+
, m_audio_output_delay(DEFAULT_AUDIO_OUTPUT_DELAY)
632+
, m_arcRoutingThread()
633+
, m_currentArcRoutingState(ARC_STATE_ARC_TERMINATED)
634+
, m_semSignaltoArcRoutingThread(0)
635+
, m_arcstarting(false)
636+
, smConnection(nullptr)
637+
, m_connectedDevices()
605638
, msgProcessor(nullptr)
606639
, msgFrameListener(nullptr)
640+
, _powerManagerPlugin()
607641
, _pwrMgrNotification(*this)
608642
, _registeredEventHandlers(false)
609-
{
610-
LOGWARN("Initlaizing HdmiCecSinkImplementation");
611-
// Thread/control flags
612-
m_pollThreadState = POLL_THREAD_STATE_NONE;
613-
m_pollNextState = POLL_THREAD_STATE_NONE;
614-
m_pollThreadExit = false;
615-
m_sleepTime = HDMICECSINK_PING_INTERVAL_MS;
616-
617-
// Send-key thread flags/queue
618-
m_sendKeyEventThreadExit = false;
619-
m_sendKeyEventThreadRun = false;
620-
621-
// Audio / latency defaults
622-
m_video_latency = DEFAULT_VIDEO_LATENCY;
623-
m_latency_flags = DEFAULT_LATENCY_FLAGS;
624-
m_audio_output_delay = DEFAULT_AUDIO_OUTPUT_DELAY;
643+
{
644+
LOGWARN("Initializing HdmiCecSinkImplementation");
625645

626-
// ARC defaults
627-
m_arcstarting = false;
628-
m_currentArcRoutingState = ARC_STATE_ARC_TERMINATED;
646+
// Deterministic initialization for all device slots
647+
for (int i = 0; i < 16; ++i) {
648+
deviceList[i].clear();
649+
deviceList[i].m_isDevicePresent = false;
650+
deviceList[i].m_isRequestRetry = 0;
651+
deviceList[i].m_isRequested = CECDeviceParams::REQUEST_NONE;
652+
}
629653

630-
// Device / CEC defaults
631-
m_deviceType = 0;
632-
m_numofHdmiInput = 0;
633-
m_numberOfDevices = 0;
634-
m_logicalAddressAllocated = LogicalAddress::UNREGISTERED;
635-
m_currentActiveSource = -1;
636-
m_isHdmiInConnected = false;
637-
hdmiCecAudioDeviceConnected = false;
638-
m_isAudioStatusInfoUpdated = false;
639-
m_audioStatusReceived = false;
640-
m_audioStatusTimerStarted = false;
641-
m_audioDevicePowerStatusRequested = false;
642-
}
654+
// Ensure queues/flags are clean
655+
while (!m_SendKeyQueue.empty()) {
656+
m_SendKeyQueue.pop();
657+
}
658+
}
643659

644660
HdmiCecSinkImplementation::~HdmiCecSinkImplementation()
645661
{
@@ -3091,6 +3107,11 @@ namespace WPEFramework
30913107
_instance->getPhysicalAddress();
30923108

30933109
smConnection = new Connection(LogicalAddress::UNREGISTERED,false,"ServiceManager::Connection::");
3110+
if(!smConnection)
3111+
{
3112+
LOGERR("smConnection is NULL");
3113+
return;
3114+
}
30943115
smConnection->open();
30953116
allocateLogicalAddress(DeviceType::TV);
30963117
LOGINFO("logical address allocalted: %x \n",m_logicalAddressAllocated);
@@ -3101,16 +3122,15 @@ namespace WPEFramework
31013122
LibCCEC::getInstance().addLogicalAddress(logicalAddress);
31023123
smConnection->setSource(logicalAddress);
31033124
}
3104-
if(smConnection)
3105-
{
3106-
msgProcessor = new HdmiCecSinkProcessor(*smConnection);
3107-
msgFrameListener = new HdmiCecSinkFrameListener(*msgProcessor);
3108-
LOGWARN("Start Thread %p", smConnection );
3109-
m_pollThreadState = POLL_THREAD_STATE_POLL;
3110-
m_pollNextState = POLL_THREAD_STATE_NONE;
3111-
m_pollThreadExit = false;
3112-
m_pollThread = std::thread(threadRun);
3113-
}
3125+
3126+
msgProcessor = new HdmiCecSinkProcessor(*smConnection);
3127+
msgFrameListener = new HdmiCecSinkFrameListener(*msgProcessor);
3128+
LOGWARN("Start Thread %p", smConnection );
3129+
m_pollThreadState = POLL_THREAD_STATE_POLL;
3130+
m_pollNextState = POLL_THREAD_STATE_NONE;
3131+
m_pollThreadExit = false;
3132+
m_pollThread = std::thread(threadRun);
3133+
31143134
cecEnableStatus = true;
31153135

31163136
params["cecEnable"] = string("true");
@@ -3125,7 +3145,7 @@ namespace WPEFramework
31253145

31263146
void HdmiCecSinkImplementation::CECDisable(void)
31273147
{
3128-
std::unique_lock<std::mutex> lock(m_enableMutex);
3148+
std::lock_guard<std::mutex> lock(m_enableMutex);
31293149
JsonObject params;
31303150
LOGINFO("Entered CECDisable ");
31313151
if(!cecEnableStatus)
@@ -3136,19 +3156,10 @@ namespace WPEFramework
31363156

31373157
if(m_currentArcRoutingState != ARC_STATE_ARC_TERMINATED)
31383158
{
3139-
// release enable lock before initiating/ waiting for ARC stop
3140-
lock.unlock();
31413159
stopArc();
3142-
3143-
// wait for the ARC state to become TERMINATED without holding m_enableMutex
3144-
const unsigned int maxRetries = 8; // e.g. total wait ~4s (8 * 500ms)
3145-
unsigned int retries = 0;
3146-
while (m_currentArcRoutingState != ARC_STATE_ARC_TERMINATED && retries++ < maxRetries) {
3160+
while (m_currentArcRoutingState != ARC_STATE_ARC_TERMINATED) {
31473161
usleep(500000);
31483162
}
3149-
3150-
// re-acquire the enable lock for the rest of CECDisable cleanup
3151-
lock.lock();
31523163
}
31533164

31543165
LOGINFO(" CECDisable ARC stopped ");

0 commit comments

Comments
 (0)