aboutsummaryrefslogtreecommitdiff
path: root/src/audio_core/renderer/adsp/audio_renderer.cpp
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2023-06-04 12:56:40 -0400
committerLiam <byteslice@airmail.cc>2023-06-04 13:00:10 -0400
commite96a3a171355323453bf0689b80e9b2279750495 (patch)
tree6c44cc3407c887b1bd4bcdaec321123932a07ca7 /src/audio_core/renderer/adsp/audio_renderer.cpp
parent125a0e5a0700e1a656faf7d65b76b0d95e8812a5 (diff)
audio_renderer: resolve adsp thread deadlock shutdown
Diffstat (limited to 'src/audio_core/renderer/adsp/audio_renderer.cpp')
-rw-r--r--src/audio_core/renderer/adsp/audio_renderer.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/audio_core/renderer/adsp/audio_renderer.cpp b/src/audio_core/renderer/adsp/audio_renderer.cpp
index 1cbeed302..8bc39f9f9 100644
--- a/src/audio_core/renderer/adsp/audio_renderer.cpp
+++ b/src/audio_core/renderer/adsp/audio_renderer.cpp
@@ -105,7 +105,7 @@ void AudioRenderer::Start(AudioRenderer_Mailbox* mailbox_) {
}
mailbox = mailbox_;
- thread = std::thread(&AudioRenderer::ThreadFunc, this);
+ thread = std::jthread([this](std::stop_token stop_token) { ThreadFunc(stop_token); });
running = true;
}
@@ -131,7 +131,7 @@ void AudioRenderer::CreateSinkStreams() {
}
}
-void AudioRenderer::ThreadFunc() {
+void AudioRenderer::ThreadFunc(std::stop_token stop_token) {
static constexpr char name[]{"AudioRenderer"};
MicroProfileOnThreadCreate(name);
Common::SetCurrentThreadName(name);
@@ -146,7 +146,7 @@ void AudioRenderer::ThreadFunc() {
constexpr u64 max_process_time{2'304'000ULL};
- while (true) {
+ while (!stop_token.stop_requested()) {
auto message{mailbox->ADSPWaitMessage()};
switch (message) {
case RenderMessage::AudioRenderer_Shutdown:
@@ -194,7 +194,7 @@ void AudioRenderer::ThreadFunc() {
max_time = std::min(command_buffer.time_limit, max_time);
command_list_processor.SetProcessTimeMax(max_time);
- streams[index]->WaitFreeSpace();
+ streams[index]->WaitFreeSpace(stop_token);
// Process the command list
{