diff --git a/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp b/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp index a4b65d1fc8..635ac0c479 100644 --- a/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp @@ -73,12 +73,17 @@ error_code _sys_lwcond_signal(ppu_thread& ppu, u32 lwcond_id, u32 lwmutex_id, u3 fmt::throw_exception("Unknown mode (%d)" HERE, mode); } - lv2_lwmutex* mutex = nullptr; + lv2_lwmutex* mutex; const auto cond = idm::check(lwcond_id, [&](lv2_lwcond& cond) -> cpu_thread* { mutex = idm::check_unlocked(lwmutex_id); + if (!mutex) + { + return 0; + } + if (cond.waiters) { std::lock_guard lock(cond.mutex); @@ -127,7 +132,7 @@ error_code _sys_lwcond_signal(ppu_thread& ppu, u32 lwcond_id, u32 lwmutex_id, u3 return nullptr; }); - if ((lwmutex_id && !mutex) || !cond) + if (!mutex || !cond) { return CELL_ESRCH; } @@ -166,12 +171,17 @@ error_code _sys_lwcond_signal_all(ppu_thread& ppu, u32 lwcond_id, u32 lwmutex_id std::basic_string threads; - lv2_lwmutex* mutex = nullptr; + lv2_lwmutex* mutex; const auto cond = idm::check(lwcond_id, [&](lv2_lwcond& cond) -> u32 { mutex = idm::check_unlocked(lwmutex_id); + if (!mutex) + { + return 0; + } + if (cond.waiters) { std::lock_guard lock(cond.mutex); @@ -207,7 +217,7 @@ error_code _sys_lwcond_signal_all(ppu_thread& ppu, u32 lwcond_id, u32 lwmutex_id return 0; }); - if ((lwmutex_id && !mutex) || !cond) + if (!mutex || !cond) { return CELL_ESRCH; }