Skip to content

Commit 2cd2bb2

Browse files
authored
Merge pull request #3930 from pljones/ChannelInfo-locks
Ensure ChannelInfo mutex taken
2 parents eefeb7d + 5ed0004 commit 2cd2bb2

2 files changed

Lines changed: 35 additions & 12 deletions

File tree

‎src/channel.cpp‎

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -357,15 +357,33 @@ float CChannel::GetPan ( const int iChanID )
357357
}
358358
}
359359

360+
void CChannel::ResetInfo()
361+
{
362+
QMutexLocker locker ( &Mutex );
363+
364+
bIsIdentified = false;
365+
ChannelInfo = CChannelCoreInfo();
366+
}
367+
360368
void CChannel::SetChanInfo ( const CChannelCoreInfo& NChanInf )
361369
{
362-
// apply value (if a new channel or different from previous one)
363-
if ( !bIsIdentified || ChannelInfo != NChanInf )
370+
bool bChanged = false;
371+
364372
{
365-
bIsIdentified = true; // Indicate we have received channel info
373+
QMutexLocker locker ( &Mutex );
366374

367-
ChannelInfo = NChanInf;
375+
// apply value (if a new channel or different from previous one)
376+
if ( !bIsIdentified || ChannelInfo != NChanInf )
377+
{
378+
bIsIdentified = true; // Indicate we have received channel info
368379

380+
ChannelInfo = NChanInf;
381+
bChanged = true;
382+
}
383+
}
384+
385+
if ( bChanged )
386+
{
369387
// fire message that the channel info has changed
370388
emit ChanInfoHasChanged();
371389
}
@@ -380,6 +398,15 @@ QString CChannel::GetName()
380398
return ChannelInfo.strName;
381399
}
382400

401+
CChannelCoreInfo CChannel::GetChanInfo()
402+
{
403+
// make sure the struct is not written at the same time when it is
404+
// read here -> use mutex to secure access
405+
QMutexLocker locker ( &Mutex );
406+
407+
return ChannelInfo;
408+
}
409+
383410
void CChannel::OnSendProtMessage ( CVector<uint8_t> vecMessage )
384411
{
385412
// only send messages if protocol is enabled, otherwise delete complete

‎src/channel.h‎

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,10 @@ class CChannel : public QObject
109109
void SetAddress ( const CHostAddress& NAddr ) { InetAddr = NAddr; }
110110
const CHostAddress& GetAddress() const { return InetAddr; }
111111

112-
void ResetInfo()
113-
{
114-
bIsIdentified = false;
115-
ChannelInfo = CChannelCoreInfo();
116-
} // reset does not emit a message
117-
QString GetName();
118-
void SetChanInfo ( const CChannelCoreInfo& NChanInf );
119-
CChannelCoreInfo& GetChanInfo() { return ChannelInfo; }
112+
void ResetInfo(); // reset does not emit a message
113+
QString GetName();
114+
void SetChanInfo ( const CChannelCoreInfo& NChanInf );
115+
CChannelCoreInfo GetChanInfo();
120116

121117
void SetRemoteInfo ( const CChannelCoreInfo ChInfo ) { Protocol.CreateChanInfoMes ( ChInfo ); }
122118

0 commit comments

Comments
 (0)