repositories
/
deb_libcec.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
b5bd4ac
)
fixed crash when CCECProcessor::Transmit was called after CCECProcessor::Close
author
Lars Op den Kamp
<lars@opdenkamp.eu>
Fri, 13 Dec 2013 12:40:14 +0000
(13:40 +0100)
committer
Lars Op den Kamp
<lars@opdenkamp.eu>
Fri, 13 Dec 2013 14:45:05 +0000
(15:45 +0100)
src/lib/CECProcessor.cpp
patch
|
blob
|
blame
|
history
diff --git
a/src/lib/CECProcessor.cpp
b/src/lib/CECProcessor.cpp
index 63e481551457682c0e58545b37272028a56979f0..557b76d904e15cf48d0ff291cf4db0e7dd61f839 100644
(file)
--- a/
src/lib/CECProcessor.cpp
+++ b/
src/lib/CECProcessor.cpp
@@
-140,6
+140,7
@@
void CCECProcessor::Close(void)
StopThread();
// close the connection
StopThread();
// close the connection
+ CLockObject lock(m_mutex);
DELETE_AND_NULL(m_communication);
}
DELETE_AND_NULL(m_communication);
}
@@
-439,6
+440,10
@@
bool CCECProcessor::Transmit(const cec_command &data, bool bIsReply)
// reset the state of this message to 'unknown'
cec_adapter_message_state adapterState = ADAPTER_MESSAGE_STATE_UNKNOWN;
// reset the state of this message to 'unknown'
cec_adapter_message_state adapterState = ADAPTER_MESSAGE_STATE_UNKNOWN;
+ CLockObject lock(m_mutex);
+ if (!m_communication)
+ return false;
+
if (!m_communication->SupportsSourceLogicalAddress(transmitData.initiator))
{
if (transmitData.initiator == CECDEVICE_UNREGISTERED && m_communication->SupportsSourceLogicalAddress(CECDEVICE_FREEUSE))
if (!m_communication->SupportsSourceLogicalAddress(transmitData.initiator))
{
if (transmitData.initiator == CECDEVICE_UNREGISTERED && m_communication->SupportsSourceLogicalAddress(CECDEVICE_FREEUSE))
@@
-477,15
+482,14
@@
bool CCECProcessor::Transmit(const cec_command &data, bool bIsReply)
}
// wait until we finished allocating a new LA if it got lost
}
// wait until we finished allocating a new LA if it got lost
+ lock.Unlock();
while (m_bStallCommunication) Sleep(5);
while (m_bStallCommunication) Sleep(5);
+ lock.Lock();
- {
- CLockObject lock(m_mutex);
- m_iLastTransmission = GetTimeMs();
- // set the number of tries
- iMaxTries = initiator->GetHandler()->GetTransmitRetries() + 1;
- initiator->MarkHandlerReady();
- }
+ m_iLastTransmission = GetTimeMs();
+ // set the number of tries
+ iMaxTries = initiator->GetHandler()->GetTransmitRetries() + 1;
+ initiator->MarkHandlerReady();
// and try to send the command
while (bRetry && ++iTries < iMaxTries)
// and try to send the command
while (bRetry && ++iTries < iMaxTries)