Skip to content

Commit 84199ab

Browse files
committed
Resolve Coverity issues
1 parent c545a6d commit 84199ab

File tree

3 files changed

+52
-33
lines changed

3 files changed

+52
-33
lines changed

HdmiCecSink/HdmiCecSink.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -109,18 +109,18 @@ namespace WPEFramework
109109
return ;
110110
}
111111

112-
bool enabled = false;
112+
if(nullptr != _hdmiCecSink)
113+
{
114+
bool enabled = false;
113115
bool ret = false;
114116
HdmiCecSink::_hdmiCecSink->GetEnabled(enabled,ret);
115117

116-
if(ret && enabled)
117-
{
118-
Exchange::IHdmiCecSink::HdmiCecSinkSuccess success;
119-
HdmiCecSink::_hdmiCecSink->SetEnabled(false,success);
120-
}
118+
if(ret && enabled)
119+
{
120+
Exchange::IHdmiCecSink::HdmiCecSinkSuccess success;
121+
HdmiCecSink::_hdmiCecSink->SetEnabled(false,success);
122+
}
121123

122-
if(nullptr != _hdmiCecSink)
123-
{
124124
_hdmiCecSink->Unregister(&_notification);
125125
Exchange::JHdmiCecSink::Unregister(*this);
126126
_hdmiCecSink->Release();

HdmiCecSink/HdmiCecSinkImplementation.cpp

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,9 @@ namespace WPEFramework
603603
HdmiCecSinkImplementation::HdmiCecSinkImplementation()
604604
: _pwrMgrNotification(*this)
605605
, _registeredEventHandlers(false)
606+
, msgProcessor(nullptr)
607+
, msgFrameListener(nullptr)
608+
, smConnection(nullptr)
606609
{
607610
LOGWARN("Initlaizing HdmiCecSinkImplementation");
608611
}
@@ -744,7 +747,7 @@ namespace WPEFramework
744747
for (int i = 0; i < m_numofHdmiInput; i++){
745748
HdmiPortMap hdmiPort((uint8_t)i);
746749
LOGINFO(" Add to vector [%d] \n", i);
747-
hdmiInputs.push_back(hdmiPort);
750+
hdmiInputs.push_back(std::move(hdmiPort));
748751
}
749752

750753
LOGINFO("Check the HDMI State \n");
@@ -809,7 +812,7 @@ namespace WPEFramework
809812
}
810813

811814

812-
const void HdmiCecSinkImplementation::InitializeIARM()
815+
void HdmiCecSinkImplementation::InitializeIARM()
813816
{
814817
if (Utils::IARM::init())
815818
{
@@ -948,17 +951,17 @@ namespace WPEFramework
948951
}
949952
void HdmiCecSinkImplementation::updateArcState()
950953
{
954+
std::lock_guard<std::mutex> lock(_instance->m_arcRoutingStateMutex);
951955
if ( m_currentArcRoutingState != ARC_STATE_ARC_TERMINATED )
952956
{
953957
if (!(hdmiInputs[HdmiArcPortID].m_isConnected))
954-
{
955-
std::lock_guard<std::mutex> lock(_instance->m_arcRoutingStateMutex);
956-
m_currentArcRoutingState = ARC_STATE_ARC_TERMINATED;
957-
}
958-
else
959-
{
960-
LOGINFO("updateArcState :not updating ARC state current arc state %d ",m_currentArcRoutingState);
961-
}
958+
{
959+
m_currentArcRoutingState = ARC_STATE_ARC_TERMINATED;
960+
}
961+
else
962+
{
963+
LOGINFO("updateArcState :not updating ARC state current arc state %d ",m_currentArcRoutingState);
964+
}
962965
}
963966
}
964967
void HdmiCecSinkImplementation::arcStartStopTimerFunction()
@@ -1027,7 +1030,7 @@ namespace WPEFramework
10271030
{
10281031
audiodescriptor.Add(descriptor);
10291032
}
1030-
HdmiCecSinkImplementation::_instance->Send_ShortAudioDescriptor_Event(audiodescriptor);
1033+
HdmiCecSinkImplementation::_instance->Send_ShortAudioDescriptor_Event(std::move(audiodescriptor));
10311034
}
10321035

10331036
void HdmiCecSinkImplementation::updateCurrentLatency(int videoLatency, bool lowLatencyMode,int audioOutputCompensated, int audioOutputDelay = 0)
@@ -1545,7 +1548,7 @@ namespace WPEFramework
15451548
device.osdName = HdmiCecSinkImplementation::_instance->deviceList[route[i]].m_osdName.toString().c_str();
15461549
device.vendorID = HdmiCecSinkImplementation::_instance->deviceList[route[i]].m_vendorID.toString().c_str();
15471550

1548-
paths.push_back(device);
1551+
paths.emplace_back(std::move(device));
15491552

15501553
snprintf(&routeString[stringLength], sizeof(routeString) - stringLength, "%s", _instance->deviceList[route[i]].m_logicalAddress.toString().c_str());
15511554
stringLength += _instance->deviceList[route[i]].m_logicalAddress.toString().length();
@@ -2953,10 +2956,18 @@ namespace WPEFramework
29532956
}
29542957

29552958
std::unique_lock<std::mutex> lk(_instance->m_pollExitMutex);
2956-
if ( _instance->m_ThreadExitCV.wait_for(lk, std::chrono::milliseconds(_instance->m_sleepTime)) == std::cv_status::timeout )
2959+
bool signaled = _instance->m_ThreadExitCV.wait_for(
2960+
lk,
2961+
std::chrono::milliseconds(_instance->m_sleepTime),
2962+
[&]{ return _instance->m_pollThreadExit; }
2963+
);
2964+
2965+
if (!signaled) {
2966+
// timeout -> continue polling loop
29572967
continue;
2958-
else
2959-
LOGINFO("Thread is going to Exit m_pollThreadExit %d\n", _instance->m_pollThreadExit );
2968+
} else {
2969+
LOGINFO("Thread is going to Exit m_pollThreadExit %d\n", _instance->m_pollThreadExit);
2970+
}
29602971

29612972
}
29622973
}
@@ -3059,14 +3070,14 @@ namespace WPEFramework
30593070
LibCCEC::getInstance().addLogicalAddress(logicalAddress);
30603071
smConnection->setSource(logicalAddress);
30613072
}
3062-
msgProcessor = new HdmiCecSinkProcessor(*smConnection);
3063-
msgFrameListener = new HdmiCecSinkFrameListener(*msgProcessor);
30643073
if(smConnection)
30653074
{
3066-
LOGWARN("Start Thread %p", smConnection );
3075+
msgProcessor = new HdmiCecSinkProcessor(*smConnection);
3076+
msgFrameListener = new HdmiCecSinkFrameListener(*msgProcessor);
3077+
LOGWARN("Start Thread %p", smConnection );
30673078
m_pollThreadState = POLL_THREAD_STATE_POLL;
3068-
m_pollNextState = POLL_THREAD_STATE_NONE;
3069-
m_pollThreadExit = false;
3079+
m_pollNextState = POLL_THREAD_STATE_NONE;
3080+
m_pollThreadExit = false;
30703081
m_pollThread = std::thread(threadRun);
30713082
}
30723083
cecEnableStatus = true;
@@ -3083,7 +3094,7 @@ namespace WPEFramework
30833094

30843095
void HdmiCecSinkImplementation::CECDisable(void)
30853096
{
3086-
std::lock_guard<std::mutex> lock(m_enableMutex);
3097+
std::unique_lock<std::mutex> lock(m_enableMutex);
30873098
JsonObject params;
30883099
LOGINFO("Entered CECDisable ");
30893100
if(!cecEnableStatus)
@@ -3094,11 +3105,19 @@ namespace WPEFramework
30943105

30953106
if(m_currentArcRoutingState != ARC_STATE_ARC_TERMINATED)
30963107
{
3108+
// release enable lock before initiating/ waiting for ARC stop
3109+
lock.unlock();
30973110
stopArc();
3098-
while(m_currentArcRoutingState != ARC_STATE_ARC_TERMINATED)
3099-
{
3100-
usleep(500000);
3111+
3112+
// wait for the ARC state to become TERMINATED without holding m_enableMutex
3113+
const unsigned int maxRetries = 8; // e.g. total wait ~4s (8 * 500ms)
3114+
unsigned int retries = 0;
3115+
while (m_currentArcRoutingState != ARC_STATE_ARC_TERMINATED && retries++ < maxRetries) {
3116+
usleep(500000);
31013117
}
3118+
3119+
// re-acquire the enable lock for the rest of CECDisable cleanup
3120+
lock.lock();
31023121
}
31033122

31043123
LOGINFO(" CECDisable ARC stopped ");

HdmiCecSink/HdmiCecSinkImplementation.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,7 @@ namespace WPEFramework {
670670
PowerManagerInterfaceRef _powerManagerPlugin;
671671
Core::Sink<PowerManagerNotification> _pwrMgrNotification;
672672
bool _registeredEventHandlers;
673-
const void InitializeIARM();
673+
void InitializeIARM();
674674
void DeinitializeIARM();
675675
void allocateLogicalAddress(int deviceType);
676676
void allocateLAforTV();

0 commit comments

Comments
 (0)