From 357235404ac616b893080b8eba77064dc7bca7d7 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sat, 20 Feb 2021 20:10:35 +1000 Subject: [PATCH] AudioStream: Fix a crash when opening device fails --- src/common/audio_stream.cpp | 7 ++++++- src/common/audio_stream.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/common/audio_stream.cpp b/src/common/audio_stream.cpp index 5af2a425d..6f129c33a 100644 --- a/src/common/audio_stream.cpp +++ b/src/common/audio_stream.cpp @@ -35,7 +35,7 @@ bool AudioStream::Reconfigure(u32 input_sample_rate /* = DefaultInputSampleRate if (!OpenDevice()) { - EmptyBuffers(); + LockedEmptyBuffers(); m_buffer_size = 0; m_output_sample_rate = 0; m_channels = 0; @@ -289,6 +289,11 @@ void AudioStream::EmptyBuffers() { std::unique_lock lock(m_buffer_mutex); std::unique_lock resampler_lock(m_resampler_mutex); + LockedEmptyBuffers(); +} + +void AudioStream::LockedEmptyBuffers() +{ m_buffer.Clear(); m_underflow_flag.store(false); m_buffer_filling.store(m_wait_for_buffer_fill); diff --git a/src/common/audio_stream.h b/src/common/audio_stream.h index 137269cd4..275d66aac 100644 --- a/src/common/audio_stream.h +++ b/src/common/audio_stream.h @@ -75,6 +75,7 @@ protected: bool SetBufferSize(u32 buffer_size); bool IsDeviceOpen() const { return (m_output_sample_rate > 0); } + void LockedEmptyBuffers(); u32 GetSamplesAvailable() const; u32 GetSamplesAvailableLocked() const; void ReadFrames(SampleType* samples, u32 num_frames, bool apply_volume);