sys_lwcond: Fix rare race on mode 3 signal (#12413)

This commit is contained in:
Elad Ashkenazi 2022-08-04 14:13:51 +03:00 committed by GitHub
parent 3e923b4993
commit 0e1931f178
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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<ppu_thread>(mutex->sq, mutex->protocol);
auto result2 = mutex->schedule<ppu_thread>(mutex->sq, mutex->protocol);
if (static_cast<ppu_thread*>(result)->state & cpu_flag::again)
if (static_cast<ppu_thread*>(result2)->state & cpu_flag::again)
{
ppu.state += cpu_flag::again;
return 0;
}
if (result2 != result)
{
cond.awake(result2);
result = nullptr;
}
}
else if (mode == 1)
{