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);