diff --git a/src/common/audio_stream.cpp b/src/common/audio_stream.cpp index f85d81a1f..d4e0b4e43 100644 --- a/src/common/audio_stream.cpp +++ b/src/common/audio_stream.cpp @@ -80,19 +80,20 @@ void AudioStream::BeginWrite(SampleType** buffer_ptr, u32* num_frames) void AudioStream::WriteFrames(const SampleType* frames, u32 num_frames) { const u32 num_samples = num_frames * m_channels; - std::unique_lock lock(m_buffer_mutex); + { + std::unique_lock lock(m_buffer_mutex); + EnsureBuffer(num_samples); + m_buffer.PushRange(frames, num_samples); + } - EnsureBuffer(num_samples); - m_buffer.PushRange(frames, num_samples); FramesAvailable(); } void AudioStream::EndWrite(u32 num_frames) { m_buffer.AdvanceTail(num_frames * m_channels); - FramesAvailable(); - m_buffer_mutex.unlock(); + FramesAvailable(); } float AudioStream::GetMaxLatency(u32 sample_rate, u32 buffer_size) @@ -209,6 +210,7 @@ void AudioStream::EnsureBuffer(u32 size) void AudioStream::DropFrames(u32 count) { + std::unique_lock lock(m_buffer_mutex); m_buffer.Remove(count); } diff --git a/src/common/null_audio_stream.cpp b/src/common/null_audio_stream.cpp index a07fa5fdf..3c9c81a92 100644 --- a/src/common/null_audio_stream.cpp +++ b/src/common/null_audio_stream.cpp @@ -16,7 +16,7 @@ void NullAudioStream::CloseDevice() {} void NullAudioStream::FramesAvailable() { // drop any buffer as soon as they're available - DropFrames(GetSamplesAvailableLocked()); + DropFrames(GetSamplesAvailable()); } std::unique_ptr AudioStream::CreateNullAudioStream()