diff options
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 77edbcd1f..002c5af2b 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include "core/core_timing_util.h" | 15 | #include "core/core_timing_util.h" |
| 16 | #include "core/hle/kernel/address_arbiter.h" | 16 | #include "core/hle/kernel/address_arbiter.h" |
| 17 | #include "core/hle/kernel/client_port.h" | 17 | #include "core/hle/kernel/client_port.h" |
| 18 | #include "core/hle/kernel/errors.h" | ||
| 18 | #include "core/hle/kernel/handle_table.h" | 19 | #include "core/hle/kernel/handle_table.h" |
| 19 | #include "core/hle/kernel/kernel.h" | 20 | #include "core/hle/kernel/kernel.h" |
| 20 | #include "core/hle/kernel/process.h" | 21 | #include "core/hle/kernel/process.h" |
| @@ -60,12 +61,8 @@ static void ThreadWakeupCallback(u64 thread_handle, [[maybe_unused]] s64 cycles_ | |||
| 60 | if (thread->HasWakeupCallback()) { | 61 | if (thread->HasWakeupCallback()) { |
| 61 | resume = thread->InvokeWakeupCallback(ThreadWakeupReason::Timeout, thread, nullptr, 0); | 62 | resume = thread->InvokeWakeupCallback(ThreadWakeupReason::Timeout, thread, nullptr, 0); |
| 62 | } | 63 | } |
| 63 | } | 64 | } else if (thread->GetStatus() == ThreadStatus::WaitMutex || |
| 64 | 65 | thread->GetStatus() == ThreadStatus::WaitCondVar) { | |
| 65 | if (thread->GetMutexWaitAddress() != 0 || thread->GetCondVarWaitAddress() != 0 || | ||
| 66 | thread->GetWaitHandle() != 0) { | ||
| 67 | ASSERT(thread->GetStatus() == ThreadStatus::WaitMutex || | ||
| 68 | thread->GetStatus() == ThreadStatus::WaitCondVar); | ||
| 69 | thread->SetMutexWaitAddress(0); | 66 | thread->SetMutexWaitAddress(0); |
| 70 | thread->SetCondVarWaitAddress(0); | 67 | thread->SetCondVarWaitAddress(0); |
| 71 | thread->SetWaitHandle(0); | 68 | thread->SetWaitHandle(0); |
| @@ -85,6 +82,10 @@ static void ThreadWakeupCallback(u64 thread_handle, [[maybe_unused]] s64 cycles_ | |||
| 85 | } | 82 | } |
| 86 | 83 | ||
| 87 | if (resume) { | 84 | if (resume) { |
| 85 | if (thread->GetStatus() == ThreadStatus::WaitCondVar || | ||
| 86 | thread->GetStatus() == ThreadStatus::WaitArb) { | ||
| 87 | thread->SetWaitSynchronizationResult(RESULT_TIMEOUT); | ||
| 88 | } | ||
| 88 | thread->ResumeFromWait(); | 89 | thread->ResumeFromWait(); |
| 89 | } | 90 | } |
| 90 | } | 91 | } |