summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/core/hle/kernel/k_process.cpp2
-rw-r--r--src/core/hle/kernel/k_thread.cpp7
2 files changed, 5 insertions, 4 deletions
diff --git a/src/core/hle/kernel/k_process.cpp b/src/core/hle/kernel/k_process.cpp
index cb84c20e3..77356e592 100644
--- a/src/core/hle/kernel/k_process.cpp
+++ b/src/core/hle/kernel/k_process.cpp
@@ -161,7 +161,7 @@ bool KProcess::ReleaseUserException(KThread* thread) {
161 std::addressof(num_waiters), 161 std::addressof(num_waiters),
162 reinterpret_cast<uintptr_t>(std::addressof(exception_thread))); 162 reinterpret_cast<uintptr_t>(std::addressof(exception_thread)));
163 next != nullptr) { 163 next != nullptr) {
164 next->SetState(ThreadState::Runnable); 164 next->EndWait(ResultSuccess);
165 } 165 }
166 166
167 KScheduler::SetSchedulerUpdateNeeded(kernel); 167 KScheduler::SetSchedulerUpdateNeeded(kernel);
diff --git a/src/core/hle/kernel/k_thread.cpp b/src/core/hle/kernel/k_thread.cpp
index c0a091bb6..e1bdd6c2c 100644
--- a/src/core/hle/kernel/k_thread.cpp
+++ b/src/core/hle/kernel/k_thread.cpp
@@ -487,9 +487,7 @@ void KThread::Unpin() {
487 487
488 // Resume any threads that began waiting on us while we were pinned. 488 // Resume any threads that began waiting on us while we were pinned.
489 for (auto it = pinned_waiter_list.begin(); it != pinned_waiter_list.end(); ++it) { 489 for (auto it = pinned_waiter_list.begin(); it != pinned_waiter_list.end(); ++it) {
490 if (it->GetState() == ThreadState::Waiting) { 490 it->EndWait(ResultSuccess);
491 it->SetState(ThreadState::Runnable);
492 }
493 } 491 }
494} 492}
495 493
@@ -884,6 +882,7 @@ void KThread::AddWaiterImpl(KThread* thread) {
884 // Keep track of how many kernel waiters we have. 882 // Keep track of how many kernel waiters we have.
885 if (IsKernelAddressKey(thread->GetAddressKey())) { 883 if (IsKernelAddressKey(thread->GetAddressKey())) {
886 ASSERT((num_kernel_waiters++) >= 0); 884 ASSERT((num_kernel_waiters++) >= 0);
885 KScheduler::SetSchedulerUpdateNeeded(kernel);
887 } 886 }
888 887
889 // Insert the waiter. 888 // Insert the waiter.
@@ -897,6 +896,7 @@ void KThread::RemoveWaiterImpl(KThread* thread) {
897 // Keep track of how many kernel waiters we have. 896 // Keep track of how many kernel waiters we have.
898 if (IsKernelAddressKey(thread->GetAddressKey())) { 897 if (IsKernelAddressKey(thread->GetAddressKey())) {
899 ASSERT((num_kernel_waiters--) > 0); 898 ASSERT((num_kernel_waiters--) > 0);
899 KScheduler::SetSchedulerUpdateNeeded(kernel);
900 } 900 }
901 901
902 // Remove the waiter. 902 // Remove the waiter.
@@ -972,6 +972,7 @@ KThread* KThread::RemoveWaiterByKey(s32* out_num_waiters, VAddr key) {
972 // Keep track of how many kernel waiters we have. 972 // Keep track of how many kernel waiters we have.
973 if (IsKernelAddressKey(thread->GetAddressKey())) { 973 if (IsKernelAddressKey(thread->GetAddressKey())) {
974 ASSERT((num_kernel_waiters--) > 0); 974 ASSERT((num_kernel_waiters--) > 0);
975 KScheduler::SetSchedulerUpdateNeeded(kernel);
975 } 976 }
976 it = waiter_list.erase(it); 977 it = waiter_list.erase(it);
977 978