diff --git a/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp b/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp index aad96f2ab5..ab43a35b02 100644 --- a/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp @@ -149,6 +149,8 @@ error_code _sys_lwcond_signal(ppu_thread& ppu, u32 lwcond_id, u32 lwmutex_id, u6 return 0; } + cond.waiters--; + if (mode == 2) { static_cast(result)->gpr[3] = CELL_EBUSY; @@ -178,8 +180,6 @@ error_code _sys_lwcond_signal(ppu_thread& ppu, u32 lwcond_id, u32 lwmutex_id, u6 } } - cond.waiters--; - if (result) { cond.awake(result); @@ -262,10 +262,10 @@ error_code _sys_lwcond_signal_all(ppu_thread& ppu, u32 lwcond_id, u32 lwmutex_id } } + cond.waiters = 0; + while (const auto cpu = cond.schedule(cond.sq, cond.protocol)) { - cond.waiters--; - if (mode == 2) { static_cast(cpu)->gpr[3] = CELL_EBUSY;