diff --git a/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp b/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp index ab43a35b02..432e1dc00d 100644 --- a/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp @@ -165,13 +165,19 @@ error_code _sys_lwcond_signal(ppu_thread& ppu, u32 lwcond_id, u32 lwmutex_id, u6 { // Respect ordering of the sleep queue mutex->sq.emplace_back(result); - result = mutex->schedule(mutex->sq, mutex->protocol); + auto result2 = mutex->schedule(mutex->sq, mutex->protocol); - if (static_cast(result)->state & cpu_flag::again) + if (static_cast(result2)->state & cpu_flag::again) { ppu.state += cpu_flag::again; return 0; } + + if (result2 != result) + { + cond.awake(result2); + result = nullptr; + } } else if (mode == 1) {