WaitSynchronizationN: Implement return values

This commit is contained in:
bunnei
2015-01-17 02:03:44 -05:00
parent e4a5d8ad4f
commit 7faf2d8e06
10 changed files with 193 additions and 87 deletions

View File

@ -52,13 +52,13 @@ ResultCode ArbitrateAddress(Handle handle, ArbitrationType type, u32 address, s3
// Wait current thread (acquire the arbiter)...
case ArbitrationType::WaitIfLessThan:
if ((s32)Memory::Read32(address) <= value) {
Kernel::WaitCurrentThread(WAITTYPE_ARB, object, address);
Kernel::WaitCurrentThread_ArbitrateAddress(object, address);
HLE::Reschedule(__func__);
}
break;
case ArbitrationType::WaitIfLessThanWithTimeout:
if ((s32)Memory::Read32(address) <= value) {
Kernel::WaitCurrentThread(WAITTYPE_ARB, object, address);
Kernel::WaitCurrentThread_ArbitrateAddress(object, address);
Kernel::WakeThreadAfterDelay(GetCurrentThread(), nanoseconds);
HLE::Reschedule(__func__);
}
@ -68,7 +68,7 @@ ResultCode ArbitrateAddress(Handle handle, ArbitrationType type, u32 address, s3
s32 memory_value = Memory::Read32(address) - 1;
Memory::Write32(address, memory_value);
if (memory_value <= value) {
Kernel::WaitCurrentThread(WAITTYPE_ARB, object, address);
Kernel::WaitCurrentThread_ArbitrateAddress(object, address);
HLE::Reschedule(__func__);
}
break;
@ -78,7 +78,7 @@ ResultCode ArbitrateAddress(Handle handle, ArbitrationType type, u32 address, s3
s32 memory_value = Memory::Read32(address) - 1;
Memory::Write32(address, memory_value);
if (memory_value <= value) {
Kernel::WaitCurrentThread(WAITTYPE_ARB, object, address);
Kernel::WaitCurrentThread_ArbitrateAddress(object, address);
Kernel::WakeThreadAfterDelay(GetCurrentThread(), nanoseconds);
HLE::Reschedule(__func__);
}