aboutsummaryrefslogtreecommitdiff
path: root/src/audio_core/sink/sink_stream.cpp
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2023-11-14 12:22:56 -0500
committerGitHub <noreply@github.com>2023-11-14 12:22:56 -0500
commit51fc608f681307efa73ff73f4445032981dbf063 (patch)
tree7e46613cf5974714b0ba70a15df223d0d80a95a7 /src/audio_core/sink/sink_stream.cpp
parent247d66a680abd437164da98d2dcd1b39726faafc (diff)
parentecaa038b4da24fe75d3da6a4a18034285faac69d (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.cpp12
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