diff --git a/src/channel.cpp b/src/channel.cpp index 581f635029..d0afcab64e 100644 --- a/src/channel.cpp +++ b/src/channel.cpp @@ -357,15 +357,33 @@ float CChannel::GetPan ( const int iChanID ) } } +void CChannel::ResetInfo() +{ + QMutexLocker locker ( &Mutex ); + + bIsIdentified = false; + ChannelInfo = CChannelCoreInfo(); +} + void CChannel::SetChanInfo ( const CChannelCoreInfo& NChanInf ) { - // apply value (if a new channel or different from previous one) - if ( !bIsIdentified || ChannelInfo != NChanInf ) + bool bChanged = false; + { - bIsIdentified = true; // Indicate we have received channel info + QMutexLocker locker ( &Mutex ); - ChannelInfo = NChanInf; + // apply value (if a new channel or different from previous one) + if ( !bIsIdentified || ChannelInfo != NChanInf ) + { + bIsIdentified = true; // Indicate we have received channel info + ChannelInfo = NChanInf; + bChanged = true; + } + } + + if ( bChanged ) + { // fire message that the channel info has changed emit ChanInfoHasChanged(); } @@ -380,6 +398,15 @@ QString CChannel::GetName() return ChannelInfo.strName; } +CChannelCoreInfo CChannel::GetChanInfo() +{ + // make sure the struct is not written at the same time when it is + // read here -> use mutex to secure access + QMutexLocker locker ( &Mutex ); + + return ChannelInfo; +} + void CChannel::OnSendProtMessage ( CVector vecMessage ) { // only send messages if protocol is enabled, otherwise delete complete diff --git a/src/channel.h b/src/channel.h index 946eae007a..f924daa034 100644 --- a/src/channel.h +++ b/src/channel.h @@ -109,14 +109,10 @@ class CChannel : public QObject void SetAddress ( const CHostAddress& NAddr ) { InetAddr = NAddr; } const CHostAddress& GetAddress() const { return InetAddr; } - void ResetInfo() - { - bIsIdentified = false; - ChannelInfo = CChannelCoreInfo(); - } // reset does not emit a message - QString GetName(); - void SetChanInfo ( const CChannelCoreInfo& NChanInf ); - CChannelCoreInfo& GetChanInfo() { return ChannelInfo; } + void ResetInfo(); // reset does not emit a message + QString GetName(); + void SetChanInfo ( const CChannelCoreInfo& NChanInf ); + CChannelCoreInfo GetChanInfo(); void SetRemoteInfo ( const CChannelCoreInfo ChInfo ) { Protocol.CreateChanInfoMes ( ChInfo ); } @@ -239,7 +235,7 @@ class CChannel : public QObject std::atomic bIsEnabled; bool bIsServer; - bool bIsIdentified; + std::atomic bIsIdentified; int iNetwFrameSizeFact; int iNetwFrameSize;