From bb541e9fb26d262f42550b353385a2b05a7ea077 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 8 Oct 2016 06:54:49 +0200 Subject: [PATCH] AudioOutput: fixed core dump on program exit --- sdrbase/audio/audiooutput.cpp | 6 +++++- sdrbase/audio/audiooutput.h | 2 ++ sdrbase/dsp/dspengine.cpp | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/sdrbase/audio/audiooutput.cpp b/sdrbase/audio/audiooutput.cpp index b57a880a6..9f5d264c2 100644 --- a/sdrbase/audio/audiooutput.cpp +++ b/sdrbase/audio/audiooutput.cpp @@ -26,6 +26,7 @@ AudioOutput::AudioOutput() : m_mutex(), m_audioOutput(0), m_audioUsageCount(0), + m_onExit(false), m_audioFifos() { } @@ -124,7 +125,10 @@ void AudioOutput::stop() if (m_audioUsageCount == 0) { QIODevice::close(); - delete m_audioOutput; + + if (!m_onExit) { + delete m_audioOutput; + } } } } diff --git a/sdrbase/audio/audiooutput.h b/sdrbase/audio/audiooutput.h index 790ae941f..6e3f19a15 100644 --- a/sdrbase/audio/audiooutput.h +++ b/sdrbase/audio/audiooutput.h @@ -41,11 +41,13 @@ public: void removeFifo(AudioFifo* audioFifo); uint getRate() const { return m_audioFormat.sampleRate(); } + void setOnExit(bool onExit) { m_onExit = onExit; } private: QMutex m_mutex; QAudioOutput* m_audioOutput; uint m_audioUsageCount; + bool m_onExit; typedef std::list AudioFifos; AudioFifos m_audioFifos; diff --git a/sdrbase/dsp/dspengine.cpp b/sdrbase/dsp/dspengine.cpp index c968441c8..2d9f1dc29 100644 --- a/sdrbase/dsp/dspengine.cpp +++ b/sdrbase/dsp/dspengine.cpp @@ -28,6 +28,8 @@ DSPEngine::DSPEngine() : DSPEngine::~DSPEngine() { + m_audioOutput.setOnExit(true); + std::vector::iterator it = m_deviceEngines.begin(); while (it != m_deviceEngines.end())