diff options
| -rw-r--r-- | src/audio_core/sink/sink_stream.cpp | 11 | ||||
| -rw-r--r-- | src/audio_core/sink/sink_stream.h | 5 | 
2 files changed, 9 insertions, 7 deletions
| diff --git a/src/audio_core/sink/sink_stream.cpp b/src/audio_core/sink/sink_stream.cpp index 849f862b0..67e194e3c 100644 --- a/src/audio_core/sink/sink_stream.cpp +++ b/src/audio_core/sink/sink_stream.cpp @@ -266,19 +266,20 @@ void SinkStream::ProcessAudioOutAndRender(std::span<s16> output_buffer, std::siz  }  void SinkStream::Stall() { -    if (stalled) { +    std::scoped_lock lk{stall_guard}; +    if (stalled_lock) {          return;      } -    stalled = true; -    system.StallProcesses(); +    stalled_lock = system.StallProcesses();  }  void SinkStream::Unstall() { -    if (!stalled) { +    std::scoped_lock lk{stall_guard}; +    if (!stalled_lock) {          return;      }      system.UnstallProcesses(); -    stalled = false; +    stalled_lock.unlock();  }  } // namespace AudioCore::Sink diff --git a/src/audio_core/sink/sink_stream.h b/src/audio_core/sink/sink_stream.h index 38a4b2f51..5fea72ab7 100644 --- a/src/audio_core/sink/sink_stream.h +++ b/src/audio_core/sink/sink_stream.h @@ -6,6 +6,7 @@  #include <array>  #include <atomic>  #include <memory> +#include <mutex>  #include <span>  #include <vector> @@ -240,8 +241,8 @@ private:      f32 system_volume{1.0f};      /// Set via IAudioDevice service calls      f32 device_volume{1.0f}; -    /// True if coretiming has been stalled -    bool stalled{false}; +    std::mutex stall_guard; +    std::unique_lock<std::mutex> stalled_lock;  };  using SinkStreamPtr = std::unique_ptr<SinkStream>; | 
