From 9492aaeba0faf5dceee166f17dd7542fdb70b2b0 Mon Sep 17 00:00:00 2001 From: "Herman S." <429230+has207@users.noreply.github.com> Date: Tue, 10 Feb 2026 00:12:27 +0900 Subject: [PATCH] [APU] Move XmaContext::Block() to base class with RAII locking --- src/xenia/apu/xma_context.h | 11 ++++++++++- src/xenia/apu/xma_context_fake.cc | 11 ----------- src/xenia/apu/xma_context_fake.h | 1 - src/xenia/apu/xma_context_master.cc | 11 ----------- src/xenia/apu/xma_context_master.h | 1 - src/xenia/apu/xma_context_new.cc | 11 ----------- src/xenia/apu/xma_context_new.h | 1 - src/xenia/apu/xma_context_old.cc | 11 ----------- src/xenia/apu/xma_context_old.h | 1 - 9 files changed, 10 insertions(+), 49 deletions(-) diff --git a/src/xenia/apu/xma_context.h b/src/xenia/apu/xma_context.h index d138539ba..1a164ab1d 100644 --- a/src/xenia/apu/xma_context.h +++ b/src/xenia/apu/xma_context.h @@ -198,7 +198,16 @@ class XmaContext { virtual bool Work() { return false; }; virtual void Enable() {}; - virtual bool Block(bool poll) { return 0; }; + virtual bool Block(bool poll) { + std::unique_lock lock(lock_, std::try_to_lock); + if (!lock.owns_lock()) { + if (poll) { + return false; + } + lock.lock(); + } + return true; + } virtual void Clear() {}; virtual void Disable() {}; virtual void Release() {}; diff --git a/src/xenia/apu/xma_context_fake.cc b/src/xenia/apu/xma_context_fake.cc index c77f471d0..edb649992 100644 --- a/src/xenia/apu/xma_context_fake.cc +++ b/src/xenia/apu/xma_context_fake.cc @@ -139,17 +139,6 @@ void XmaContextFake::Enable() { set_is_enabled(true); } -bool XmaContextFake::Block(bool poll) { - if (!lock_.try_lock()) { - if (poll) { - return false; - } - lock_.lock(); - } - lock_.unlock(); - return true; -} - void XmaContextFake::Clear() { std::lock_guard lock(lock_); XELOGAPU("XmaContextFake: reset context {}", id()); diff --git a/src/xenia/apu/xma_context_fake.h b/src/xenia/apu/xma_context_fake.h index edf167e6e..62930e294 100644 --- a/src/xenia/apu/xma_context_fake.h +++ b/src/xenia/apu/xma_context_fake.h @@ -36,7 +36,6 @@ class XmaContextFake : public XmaContext { bool Work() override; void Enable() override; - bool Block(bool poll) override; void Clear() override; void Disable() override; void Release() override; diff --git a/src/xenia/apu/xma_context_master.cc b/src/xenia/apu/xma_context_master.cc index f6e179100..7045a0f66 100644 --- a/src/xenia/apu/xma_context_master.cc +++ b/src/xenia/apu/xma_context_master.cc @@ -123,17 +123,6 @@ void XmaContextMaster::Enable() { set_is_enabled(true); } -bool XmaContextMaster::Block(bool poll) { - if (!lock_.try_lock()) { - if (poll) { - return false; - } - lock_.lock(); - } - lock_.unlock(); - return true; -} - void XmaContextMaster::Clear() { std::lock_guard lock(lock_); XELOGAPU("XmaContext: reset context {}", id()); diff --git a/src/xenia/apu/xma_context_master.h b/src/xenia/apu/xma_context_master.h index b1b5724da..e846751bd 100644 --- a/src/xenia/apu/xma_context_master.h +++ b/src/xenia/apu/xma_context_master.h @@ -38,7 +38,6 @@ class XmaContextMaster : public XmaContext { bool Work(); void Enable(); - bool Block(bool poll); void Clear(); void Disable(); void Release(); diff --git a/src/xenia/apu/xma_context_new.cc b/src/xenia/apu/xma_context_new.cc index c2829abf1..06cb5df7a 100644 --- a/src/xenia/apu/xma_context_new.cc +++ b/src/xenia/apu/xma_context_new.cc @@ -204,17 +204,6 @@ void XmaContextNew::Enable() { set_is_enabled(true); } -bool XmaContextNew::Block(bool poll) { - if (!lock_.try_lock()) { - if (poll) { - return false; - } - lock_.lock(); - } - lock_.unlock(); - return true; -} - void XmaContextNew::Clear() { std::lock_guard lock(lock_); ClearLocked(); diff --git a/src/xenia/apu/xma_context_new.h b/src/xenia/apu/xma_context_new.h index 50349b3be..dbab07022 100644 --- a/src/xenia/apu/xma_context_new.h +++ b/src/xenia/apu/xma_context_new.h @@ -55,7 +55,6 @@ class XmaContextNew : public XmaContext { bool Work(); void Enable(); - bool Block(bool poll); void Clear(); void Disable(); void Release(); diff --git a/src/xenia/apu/xma_context_old.cc b/src/xenia/apu/xma_context_old.cc index ed6b3c4f1..0cd26a7cf 100644 --- a/src/xenia/apu/xma_context_old.cc +++ b/src/xenia/apu/xma_context_old.cc @@ -124,17 +124,6 @@ void XmaContextOld::Enable() { set_is_enabled(true); } -bool XmaContextOld::Block(bool poll) { - if (!lock_.try_lock()) { - if (poll) { - return false; - } - lock_.lock(); - } - lock_.unlock(); - return true; -} - void XmaContextOld::Clear() { std::lock_guard lock(lock_); XELOGAPU("XmaContext: reset context {}", id()); diff --git a/src/xenia/apu/xma_context_old.h b/src/xenia/apu/xma_context_old.h index 736b961a0..a16c8ada6 100644 --- a/src/xenia/apu/xma_context_old.h +++ b/src/xenia/apu/xma_context_old.h @@ -38,7 +38,6 @@ class XmaContextOld : public XmaContext { bool Work(); void Enable(); - bool Block(bool poll); void Clear(); void Disable(); void Release();