|
|
@ -1350,7 +1350,7 @@ static ResultCode WaitProcessWideKeyAtomic(VAddr mutex_addr, VAddr condition_var |
|
|
current_thread->SetCondVarWaitAddress(condition_variable_addr); |
|
|
current_thread->SetCondVarWaitAddress(condition_variable_addr); |
|
|
current_thread->SetMutexWaitAddress(mutex_addr); |
|
|
current_thread->SetMutexWaitAddress(mutex_addr); |
|
|
current_thread->SetWaitHandle(thread_handle); |
|
|
current_thread->SetWaitHandle(thread_handle); |
|
|
current_thread->SetStatus(ThreadStatus::WaitMutex); |
|
|
|
|
|
|
|
|
current_thread->SetStatus(ThreadStatus::WaitCondVar); |
|
|
current_thread->InvalidateWakeupCallback(); |
|
|
current_thread->InvalidateWakeupCallback(); |
|
|
|
|
|
|
|
|
current_thread->WakeAfterDelay(nano_seconds); |
|
|
current_thread->WakeAfterDelay(nano_seconds); |
|
|
@ -1456,7 +1456,7 @@ static ResultCode SignalProcessWideKey(VAddr condition_variable_addr, s32 target |
|
|
const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
|
|
const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
|
|
auto owner = handle_table.Get<Thread>(owner_handle); |
|
|
auto owner = handle_table.Get<Thread>(owner_handle); |
|
|
ASSERT(owner); |
|
|
ASSERT(owner); |
|
|
ASSERT(thread->GetStatus() == ThreadStatus::WaitMutex); |
|
|
|
|
|
|
|
|
ASSERT(thread->GetStatus() == ThreadStatus::WaitCondVar); |
|
|
thread->InvalidateWakeupCallback(); |
|
|
thread->InvalidateWakeupCallback(); |
|
|
|
|
|
|
|
|
owner->AddMutexWaiter(thread); |
|
|
owner->AddMutexWaiter(thread); |
|
|
|