From 1d5a2f1ac7b08d85387da962fb0e191c52f01405 Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Wed, 12 Aug 2015 21:45:02 -0400 Subject: [PATCH] Fix for an initial priming overload and visuals memory leak --- src/CubicSDR.cpp | 4 +++- src/IOThread.h | 5 +++++ src/demod/DemodulatorThread.cpp | 2 +- src/sdr/SDRPostThread.cpp | 10 ++++++++-- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/CubicSDR.cpp b/src/CubicSDR.cpp index ca1eef3..2283d57 100644 --- a/src/CubicSDR.cpp +++ b/src/CubicSDR.cpp @@ -78,9 +78,11 @@ bool CubicSDR::OnInit() { scopeProcessor.setInput(pipeAudioVisualData); // I/Q Data - pipeSDRIQData = new SDRThreadIQDataQueue; + pipeSDRIQData = new SDRThreadIQDataQueue(); pipeSDRCommand = new SDRThreadCommandQueue(); + pipeSDRIQData->set_max_num_items(1); + sdrThread = new SDRThread(); sdrThread->setInputQueue("SDRCommandQueue",pipeSDRCommand); sdrThread->setOutputQueue("IQDataOutput",pipeSDRIQData); diff --git a/src/IOThread.h b/src/IOThread.h index 734b37a..743635c 100644 --- a/src/IOThread.h +++ b/src/IOThread.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "ThreadQueue.h" @@ -63,6 +64,10 @@ public: return buf; } +// if (outputBuffers.size() > 100) { +// std::cout << "Buffer over 100.." << std::endl; +// } + buf = new BufferType(); outputBuffers.push_back(buf); diff --git a/src/demod/DemodulatorThread.cpp b/src/demod/DemodulatorThread.cpp index d987a15..becc261 100644 --- a/src/demod/DemodulatorThread.cpp +++ b/src/demod/DemodulatorThread.cpp @@ -94,7 +94,7 @@ void DemodulatorThread::run() { while (!terminated) { DemodulatorThreadPostIQData *inp; iqInputQueue->pop(inp); - std::lock_guard < std::mutex > lock(inp->m_mutex); +// std::lock_guard < std::mutex > lock(inp->m_mutex); int bufSize = inp->data.size(); diff --git a/src/sdr/SDRPostThread.cpp b/src/sdr/SDRPostThread.cpp index 7a999f9..a9955cd 100644 --- a/src/sdr/SDRPostThread.cpp +++ b/src/sdr/SDRPostThread.cpp @@ -86,6 +86,8 @@ void SDRPostThread::run() { std::vector fpData; std::vector dataOut; + iqDataInQueue->set_max_num_items(30); + while (!terminated) { SDRThreadIQData *data_in; @@ -203,8 +205,12 @@ void SDRPostThread::run() { } if (iqDataOutQueue != NULL) { - iqDataOutQueue->push(demodDataOut); - pushedData = true; + if (!iqDataOutQueue->full()) { + iqDataOutQueue->push(demodDataOut); + pushedData = true; + } else { + demodDataOut->decRefCount(); + } } if (!pushedData && iqDataOutQueue == NULL) {