Return ESRCH if ppu thread ID was not found in sys_cond_signal_to

This commit is contained in:
eladash 2019-05-03 10:15:31 +03:00 committed by kd-11
parent 4e2650af91
commit 13d8e33d9a
1 changed files with 8 additions and 3 deletions

View File

@ -154,6 +154,11 @@ error_code sys_cond_signal_to(ppu_thread& ppu, u32 cond_id, u32 thread_id)
const auto cond = idm::check<lv2_obj, lv2_cond>(cond_id, [&](lv2_cond& cond) -> cpu_thread* const auto cond = idm::check<lv2_obj, lv2_cond>(cond_id, [&](lv2_cond& cond) -> cpu_thread*
{ {
if (!idm::check_unlocked<named_thread<ppu_thread>>(thread_id))
{
return (cpu_thread*)(1);
}
if (cond.waiters) if (cond.waiters)
{ {
std::lock_guard lock(cond.mutex->mutex); std::lock_guard lock(cond.mutex->mutex);
@ -169,7 +174,7 @@ error_code sys_cond_signal_to(ppu_thread& ppu, u32 cond_id, u32 thread_id)
return cpu; return cpu;
} }
return (cpu_thread*)(1); return (cpu_thread*)(2);
} }
} }
} }
@ -177,12 +182,12 @@ error_code sys_cond_signal_to(ppu_thread& ppu, u32 cond_id, u32 thread_id)
return nullptr; return nullptr;
}); });
if (!cond) if (!cond || cond.ret == (cpu_thread*)(1))
{ {
return CELL_ESRCH; return CELL_ESRCH;
} }
if (cond.ret && cond.ret != (cpu_thread*)(1)) if (cond.ret && cond.ret != (cpu_thread*)(2))
{ {
cond->awake(*cond.ret); cond->awake(*cond.ret);
} }