From f60f418f1b348d0c050b75e740a62ddadbfdcc46 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 6 Jan 2018 06:12:30 +0100 Subject: [PATCH] Audio in/out mutex corrections --- sdrbase/audio/audioinput.cpp | 8 +++----- sdrbase/audio/audiooutput.cpp | 7 +++---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/sdrbase/audio/audioinput.cpp b/sdrbase/audio/audioinput.cpp index 05f0b1b35..bafa6718d 100644 --- a/sdrbase/audio/audioinput.cpp +++ b/sdrbase/audio/audioinput.cpp @@ -22,7 +22,7 @@ #include "audio/audiofifo.h" AudioInput::AudioInput() : - m_mutex(), + m_mutex(QMutex::Recursive), m_audioInput(0), m_audioUsageCount(0), m_onExit(false), @@ -47,10 +47,9 @@ AudioInput::~AudioInput() bool AudioInput::start(int device, int rate) { - QMutexLocker mutexLocker(&m_mutex); - if (m_audioUsageCount == 0) { + QMutexLocker mutexLocker(&m_mutex); QAudioDeviceInfo devInfo; if (device < 0) @@ -194,8 +193,6 @@ void AudioInput::stop() { qDebug("AudioInput::stop"); - QMutexLocker mutexLocker(&m_mutex); - if (m_audioUsageCount > 0) { m_audioUsageCount--; @@ -203,6 +200,7 @@ void AudioInput::stop() if (m_audioUsageCount == 0) { qDebug("AudioInput::stop: effectively close QIODevice"); + QMutexLocker mutexLocker(&m_mutex); QIODevice::close(); if (!m_onExit) { diff --git a/sdrbase/audio/audiooutput.cpp b/sdrbase/audio/audiooutput.cpp index 62b4bbe66..b3256c695 100644 --- a/sdrbase/audio/audiooutput.cpp +++ b/sdrbase/audio/audiooutput.cpp @@ -23,7 +23,7 @@ #include "audio/audiofifo.h" AudioOutput::AudioOutput() : - m_mutex(), + m_mutex(QMutex::Recursive), m_audioOutput(0), m_audioUsageCount(0), m_onExit(false), @@ -47,10 +47,10 @@ AudioOutput::~AudioOutput() bool AudioOutput::start(int device, int rate) { - QMutexLocker mutexLocker(&m_mutex); if (m_audioUsageCount == 0) { + QMutexLocker mutexLocker(&m_mutex); QAudioDeviceInfo devInfo; if (device < 0) @@ -191,14 +191,13 @@ void AudioOutput::stop() { qDebug("AudioOutput::stop"); - QMutexLocker mutexLocker(&m_mutex); - if (m_audioUsageCount > 0) { m_audioUsageCount--; if (m_audioUsageCount == 0) { + QMutexLocker mutexLocker(&m_mutex); QIODevice::close(); if (!m_onExit) {