From 78dbc4fb5fe8c81bd663995ac7fb5b7fa731bfc8 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 25 Mar 2018 03:41:55 +0300 Subject: [PATCH] RawSPU: reset status register on start Was proposed by @elad335 Implemented as atomic op --- rpcs3/Emu/Cell/RawSPUThread.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index 4477e3308f..3bf09706ee 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -106,7 +106,16 @@ bool RawSPUThread::write_reg(const u32 addr, const u32 value) { auto try_start = [this]() { - if (!status.test_and_set(SPU_STATUS_RUNNING)) + if (status.atomic_op([](u32& status) + { + if (status & SPU_STATUS_RUNNING) + { + return false; + } + + status = SPU_STATUS_RUNNING; + return true; + })) { run(); }