diff options
| author | liamwhite <liamwhite@users.noreply.github.com> | 2023-11-14 12:22:56 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-14 12:22:56 -0500 |
| commit | 51fc608f681307efa73ff73f4445032981dbf063 (patch) | |
| tree | 7e46613cf5974714b0ba70a15df223d0d80a95a7 /src/audio_core/sink/sink_stream.cpp | |
| parent | 247d66a680abd437164da98d2dcd1b39726faafc (diff) | |
| parent | ecaa038b4da24fe75d3da6a4a18034285faac69d (diff) | |
Merge pull request #12019 from liamwhite/more-shutdown-deadlocks
audio_core: ignore renderer wait when stream is paused
Diffstat (limited to 'src/audio_core/sink/sink_stream.cpp')
| -rw-r--r-- | src/audio_core/sink/sink_stream.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/audio_core/sink/sink_stream.cpp b/src/audio_core/sink/sink_stream.cpp index d66d04fae..2a09db599 100644 --- a/src/audio_core/sink/sink_stream.cpp +++ b/src/audio_core/sink/sink_stream.cpp @@ -282,11 +282,19 @@ u64 SinkStream::GetExpectedPlayedSampleCount() { void SinkStream::WaitFreeSpace(std::stop_token stop_token) { std::unique_lock lk{release_mutex}; release_cv.wait_for(lk, std::chrono::milliseconds(5), - [this]() { return queued_buffers < max_queue_size; }); + [this]() { return paused || queued_buffers < max_queue_size; }); if (queued_buffers > max_queue_size + 3) { Common::CondvarWait(release_cv, lk, stop_token, - [this] { return queued_buffers < max_queue_size; }); + [this] { return paused || queued_buffers < max_queue_size; }); } } +void SinkStream::SignalPause() { + { + std::scoped_lock lk{release_mutex}; + paused = true; + } + release_cv.notify_one(); +} + } // namespace AudioCore::Sink |
