From 54d0922ceade914c58d19d34916830a708784049 Mon Sep 17 00:00:00 2001 From: gnudles Date: Sun, 5 Feb 2017 20:06:35 +0200 Subject: [PATCH] SoundIO- fixed up crashes when device cannot be opened. (#3238) * SoundIO- fixed up crashes when device cannot be opened. * SoundIO - reset soundio pointer after destroy. --- src/core/audio/AudioSoundIo.cpp | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/core/audio/AudioSoundIo.cpp b/src/core/audio/AudioSoundIo.cpp index 69f1a2183..0c36d926a 100644 --- a/src/core/audio/AudioSoundIo.cpp +++ b/src/core/audio/AudioSoundIo.cpp @@ -46,6 +46,7 @@ AudioSoundIo::AudioSoundIo( bool & outSuccessful, Mixer * _mixer ) : outSuccessful = false; m_soundio = NULL; m_outstream = NULL; + m_outBuf = NULL; m_disconnectErr = 0; m_outBufFrameIndex = 0; m_outBufFramesTotal = 0; @@ -195,7 +196,11 @@ void AudioSoundIo::onBackendDisconnect(int err) AudioSoundIo::~AudioSoundIo() { stopProcessing(); - soundio_destroy(m_soundio); + if (m_soundio) + { + soundio_destroy(m_soundio); + m_soundio = NULL; + } } void AudioSoundIo::startProcessing() @@ -215,11 +220,17 @@ void AudioSoundIo::startProcessing() void AudioSoundIo::stopProcessing() { - soundio_outstream_destroy(m_outstream); - m_outstream = NULL; + if (m_outstream) + { + soundio_outstream_destroy(m_outstream); + m_outstream = NULL; + } - delete[] m_outBuf; - m_outBuf = NULL; + if (m_outBuf) + { + delete[] m_outBuf; + m_outBuf = NULL; + } } void AudioSoundIo::errorCallback(int err) @@ -440,7 +451,11 @@ AudioSoundIo::setupWidget::~setupWidget() { bool ok = disconnect( &m_backendModel, SIGNAL( dataChanged() ), &m_setupUtil, SLOT( reconnectSoundIo() ) ); assert(ok); - soundio_destroy(m_soundio); + if (m_soundio) + { + soundio_destroy(m_soundio); + m_soundio = NULL; + } } void AudioSoundIo::setupWidget::saveSettings()