From 059228e39fb27b8daf9e2c6873905c04d7272af7 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 18 Nov 2018 09:39:22 +0100 Subject: [PATCH] PVS-Studio Analysis corrections for serious issues --- .../channelrx/daemonsink/daemonsinkthread.h | 2 +- plugins/channelrx/demodatv/atvdemod.h | 3 ++- .../daemonsource/daemonsourcethread.h | 2 +- .../bladerf1output/bladerf1outputgui.cpp | 6 +----- .../bladerf2output/bladerf2output.cpp | 8 ++++++++ .../sdrdaemonsink/udpsinkfecworker.cpp | 6 +++++- .../sdrdaemonsink/udpsinkfecworker.h | 2 +- .../bladerf1input/bladerf1inputgui.cpp | 6 +----- .../bladerf2input/bladerf2input.cpp | 10 ++++++++++ .../sdrdaemonsourceudphandler.cpp | 18 +++++++++--------- sdrbase/channel/sdrdaemondatablock.h | 9 ++++++++- sdrbase/dsp/downchannelizer.cpp | 2 +- 12 files changed, 48 insertions(+), 26 deletions(-) diff --git a/plugins/channelrx/daemonsink/daemonsinkthread.h b/plugins/channelrx/daemonsink/daemonsinkthread.h index 5e468f7a9..e4f5cb332 100644 --- a/plugins/channelrx/daemonsink/daemonsinkthread.h +++ b/plugins/channelrx/daemonsink/daemonsinkthread.h @@ -68,7 +68,7 @@ public slots: private: QMutex m_startWaitMutex; QWaitCondition m_startWaiter; - bool m_running; + volatile bool m_running; CM256 m_cm256; CM256 *m_cm256p; diff --git a/plugins/channelrx/demodatv/atvdemod.h b/plugins/channelrx/demodatv/atvdemod.h index d4a5d4a7e..9d99c09ac 100644 --- a/plugins/channelrx/demodatv/atvdemod.h +++ b/plugins/channelrx/demodatv/atvdemod.h @@ -65,7 +65,8 @@ public: ATV_FM3, //!< Classical frequency modulation with phase derivative discriminator ATV_AM, //!< Classical amplitude modulation ATV_USB, //!< AM with vestigial lower side band (main signal is in the upper side) - ATV_LSB //!< AM with vestigial upper side band (main signal is in the lower side) + ATV_LSB, //!< AM with vestigial upper side band (main signal is in the lower side) + ATV_NONE //!< No modulation just produces zeros }; struct ATVConfig diff --git a/plugins/channeltx/daemonsource/daemonsourcethread.h b/plugins/channeltx/daemonsource/daemonsourcethread.h index a5371bed7..690d902a0 100644 --- a/plugins/channeltx/daemonsource/daemonsourcethread.h +++ b/plugins/channeltx/daemonsource/daemonsourcethread.h @@ -83,7 +83,7 @@ public: private: QMutex m_startWaitMutex; QWaitCondition m_startWaiter; - bool m_running; + volatile bool m_running; MessageQueue m_inputMessageQueue; SDRDaemonDataQueue *m_dataQueue; diff --git a/plugins/samplesink/bladerf1output/bladerf1outputgui.cpp b/plugins/samplesink/bladerf1output/bladerf1outputgui.cpp index 76562676f..d94afe77d 100644 --- a/plugins/samplesink/bladerf1output/bladerf1outputgui.cpp +++ b/plugins/samplesink/bladerf1output/bladerf1outputgui.cpp @@ -395,14 +395,10 @@ unsigned int Bladerf1OutputGui::getXb200Index(bool xb_200, bladerf_xb200_path xb { return 6; } - else if (xb200Filter == BLADERF_XB200_222M) + else // xb200Filter == BLADERF_XB200_222M { return 7; } - else - { - return 0; - } } } else diff --git a/plugins/samplesink/bladerf2output/bladerf2output.cpp b/plugins/samplesink/bladerf2output/bladerf2output.cpp index c11c5a638..caea1d0a5 100644 --- a/plugins/samplesink/bladerf2output/bladerf2output.cpp +++ b/plugins/samplesink/bladerf2output/bladerf2output.cpp @@ -303,6 +303,10 @@ bool BladeRF2Output::start() m_deviceShared.m_dev->closeTx(i); } + // was used as temporary storage: + delete[] fifos; + delete[] log2Interps; + needsStart = true; } else @@ -450,6 +454,10 @@ void BladeRF2Output::stop() bladeRF2OutputThread->startWork(); } + + // was used as temporary storage: + delete[] fifos; + delete[] log2Interps; } else // remove channel from existing thread { diff --git a/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.cpp b/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.cpp index 7618c4421..29f2c14c4 100644 --- a/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.cpp +++ b/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.cpp @@ -46,9 +46,13 @@ void UDPSinkFECWorker::startWork() qDebug("UDPSinkFECWorker::startWork"); m_startWaitMutex.lock(); m_udpSocket = new QUdpSocket(this); + start(); - while(!m_running) + + while(!m_running) { m_startWaiter.wait(&m_startWaitMutex, 100); + } + m_startWaitMutex.unlock(); } diff --git a/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.h b/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.h index 32580aa3f..fb61b602c 100644 --- a/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.h +++ b/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.h @@ -135,7 +135,7 @@ private: QMutex m_startWaitMutex; QWaitCondition m_startWaiter; - bool m_running; + volatile bool m_running; CM256 m_cm256; //!< CM256 library object bool m_cm256Valid; //!< true if CM256 library is initialized correctly QUdpSocket *m_udpSocket; diff --git a/plugins/samplesource/bladerf1input/bladerf1inputgui.cpp b/plugins/samplesource/bladerf1input/bladerf1inputgui.cpp index 3865fedce..3978c3f6e 100644 --- a/plugins/samplesource/bladerf1input/bladerf1inputgui.cpp +++ b/plugins/samplesource/bladerf1input/bladerf1inputgui.cpp @@ -463,14 +463,10 @@ unsigned int Bladerf1InputGui::getXb200Index(bool xb_200, bladerf_xb200_path xb2 { return 6; } - else if (xb200Filter == BLADERF_XB200_222M) + else // xb200Filter == BLADERF_XB200_222M { return 7; } - else - { - return 0; - } } } else diff --git a/plugins/samplesource/bladerf2input/bladerf2input.cpp b/plugins/samplesource/bladerf2input/bladerf2input.cpp index e2c46c04a..2f3faa600 100644 --- a/plugins/samplesource/bladerf2input/bladerf2input.cpp +++ b/plugins/samplesource/bladerf2input/bladerf2input.cpp @@ -329,6 +329,11 @@ bool BladeRF2Input::start() ((DeviceBladeRF2Shared*) (*it)->getBuddySharedPtr())->m_source->setThread(0); } + // was used as temporary storage: + delete[] fifos; + delete[] log2Decims; + delete[] fcPoss; + needsStart = true; } else @@ -470,6 +475,11 @@ void BladeRF2Input::stop() if (stillActiveFIFO) { bladerf2InputThread->startWork(); } + + // was used as temporary storage: + delete[] fifos; + delete[] log2Decims; + delete[] fcPoss; } else // remove channel from existing thread { diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp index d24579eaa..9dfa8e7af 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp @@ -262,13 +262,7 @@ void SDRdaemonSourceUDPHandler::tick() const SDRDaemonMetaDataFEC& metaData = m_sdrDaemonBuffer.getCurrentMeta(); m_readLength = m_readLengthSamples * (metaData.m_sampleBytes & 0xF) * 2; - if (SDR_RX_SAMP_SZ == metaData.m_sampleBits) // same sample size - { - // read samples directly feeding the SampleFifo (no callback) - m_sampleFifo->write(reinterpret_cast(m_sdrDaemonBuffer.readData(m_readLength)), m_readLength); - m_samplesCount += m_readLengthSamples; - } - else if (metaData.m_sampleBits == 16) // 16 -> 24 bits + if ((metaData.m_sampleBits == 16) && (SDR_RX_SAMP_SZ == 24)) // 16 -> 24 bits { if (m_readLengthSamples > m_converterBufferNbSamples) { @@ -288,7 +282,7 @@ void SDRdaemonSourceUDPHandler::tick() m_sampleFifo->write(reinterpret_cast(m_converterBuffer), m_readLengthSamples*sizeof(Sample)); } - else if (metaData.m_sampleBits == 24) // 24 -> 16 bits + else if ((metaData.m_sampleBits == 24) && (SDR_RX_SAMP_SZ == 16)) // 24 -> 16 bits { if (m_readLengthSamples > m_converterBufferNbSamples) { @@ -307,7 +301,13 @@ void SDRdaemonSourceUDPHandler::tick() m_sampleFifo->write(reinterpret_cast(m_converterBuffer), m_readLengthSamples*sizeof(Sample)); } - else + else if ((metaData.m_sampleBits == 16) || (metaData.m_sampleBits == 24)) // same sample size and valid size + { + // read samples directly feeding the SampleFifo (no callback) + m_sampleFifo->write(reinterpret_cast(m_sdrDaemonBuffer.readData(m_readLength)), m_readLength); + m_samplesCount += m_readLengthSamples; + } + else // invalid size { qWarning("SDRdaemonSourceUDPHandler::tick: unexpected sample size in stream: %d bits", (int) metaData.m_sampleBits); } diff --git a/sdrbase/channel/sdrdaemondatablock.h b/sdrbase/channel/sdrdaemondatablock.h index 1b877f8f1..ed0b2241e 100644 --- a/sdrbase/channel/sdrdaemondatablock.h +++ b/sdrbase/channel/sdrdaemondatablock.h @@ -42,13 +42,20 @@ struct SDRDaemonMetaDataFEC uint8_t m_sampleBits; //!< 10 number of effective bits per sample (deprecated) uint8_t m_nbOriginalBlocks; //!< 11 number of blocks with original (protected) data uint8_t m_nbFECBlocks; //!< 12 number of blocks carrying FEC + uint32_t m_tv_sec; //!< 16 seconds of timestamp at start time of super-frame processing uint32_t m_tv_usec; //!< 20 microseconds of timestamp at start time of super-frame processing uint32_t m_crc32; //!< 24 CRC32 of the above bool operator==(const SDRDaemonMetaDataFEC& rhs) { - return (memcmp((const void *) this, (const void *) &rhs, 12) == 0); // Only the 12 first bytes are relevant + // Only the first 6 fields are relevant + return (m_centerFrequency == rhs.m_centerFrequency) + && (m_sampleRate == rhs.m_sampleRate) + && (m_sampleBytes == rhs.m_sampleBytes) + && (m_sampleBits == rhs.m_sampleBits) + && (m_nbOriginalBlocks == rhs.m_nbOriginalBlocks) + && (m_nbFECBlocks == rhs.m_nbFECBlocks); } void init() diff --git a/sdrbase/dsp/downchannelizer.cpp b/sdrbase/dsp/downchannelizer.cpp index b8fe5f3f3..4d53b3b45 100644 --- a/sdrbase/dsp/downchannelizer.cpp +++ b/sdrbase/dsp/downchannelizer.cpp @@ -295,7 +295,7 @@ void DownChannelizer::freeFilterChain() void DownChannelizer::debugFilterChain() { - qDebug("DownChannelizer::debugFilterChain: %lu stages", m_filterStages.size()); + qDebug("DownChannelizer::debugFilterChain: %u stages", m_filterStages.size()); for(FilterStages::iterator it = m_filterStages.begin(); it != m_filterStages.end(); ++it) {