From ea056849faaa82dc040aa4308887658380e59e8f Mon Sep 17 00:00:00 2001 From: "Herman S." <429230+has207@users.noreply.github.com> Date: Mon, 9 Feb 2026 18:04:34 +0900 Subject: [PATCH] [XMA] Fix recursive lock acquisition in new decoder --- src/xenia/apu/xma_context_new.cc | 6 +++++- src/xenia/apu/xma_context_new.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/xenia/apu/xma_context_new.cc b/src/xenia/apu/xma_context_new.cc index 6dad9704c..c2829abf1 100644 --- a/src/xenia/apu/xma_context_new.cc +++ b/src/xenia/apu/xma_context_new.cc @@ -131,7 +131,7 @@ bool XmaContextNew::Work() { if (data.IsConsumeOnlyContext()) { Consume(&output_rb, &data); if (data.output_buffer_read_offset == data.output_buffer_write_offset) { - Clear(); + ClearLocked(); } data.Store(context_ptr); return true; @@ -217,6 +217,10 @@ bool XmaContextNew::Block(bool poll) { void XmaContextNew::Clear() { std::lock_guard lock(lock_); + ClearLocked(); +} + +void XmaContextNew::ClearLocked() { XELOGAPU("XmaContext: reset context {}", id()); auto context_ptr = memory()->TranslateVirtual(guest_ptr()); diff --git a/src/xenia/apu/xma_context_new.h b/src/xenia/apu/xma_context_new.h index 7b0a426ab..50349b3be 100644 --- a/src/xenia/apu/xma_context_new.h +++ b/src/xenia/apu/xma_context_new.h @@ -61,6 +61,7 @@ class XmaContextNew : public XmaContext { void Release(); private: + void ClearLocked(); static void SwapInputBuffer(XMA_CONTEXT_DATA* data); // Convert sampling rate from ID to frequency. static int GetSampleRate(int id);