From 9e9c5acc17311ebf4a8044cf8784283729090aa9 Mon Sep 17 00:00:00 2001 From: Johannes Lorenz Date: Wed, 15 Apr 2020 21:56:21 +0200 Subject: [PATCH] Audio/MidiJack: Fix invalid read: (2) of #5408 This patch * makes `m_stopped` atomic * initializes `m_stopped` correctly to `true` * moves the initialization of `m_stopped` to the point where jack ports are already connected --- include/AudioJack.h | 3 ++- src/core/audio/AudioJack.cpp | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/AudioJack.h b/include/AudioJack.h index 9bbb3bd48..9c412e202 100644 --- a/include/AudioJack.h +++ b/include/AudioJack.h @@ -34,6 +34,7 @@ #include "AudioWeakJack.h" #endif +#include #include #include #include @@ -106,7 +107,7 @@ private: jack_client_t * m_client; bool m_active; - bool m_stopped; + std::atomic m_stopped; MidiJack *m_midiClient; QVector m_outputPorts; diff --git a/src/core/audio/AudioJack.cpp b/src/core/audio/AudioJack.cpp index bca41356b..ba0daae94 100644 --- a/src/core/audio/AudioJack.cpp +++ b/src/core/audio/AudioJack.cpp @@ -56,6 +56,8 @@ AudioJack::AudioJack( bool & _success_ful, Mixer* _mixer ) : m_framesDoneInCurBuf( 0 ), m_framesToDoInCurBuf( 0 ) { + m_stopped = true; + _success_ful = initJackClient(); if( _success_ful ) { @@ -201,8 +203,6 @@ bool AudioJack::initJackClient() void AudioJack::startProcessing() { - m_stopped = false; - if( m_active || m_client == NULL ) { return; @@ -245,6 +245,7 @@ void AudioJack::startProcessing() } } + m_stopped = false; free( ports ); }