summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/kernel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
-rw-r--r--src/core/hle/kernel/kernel.cpp13
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}