summaryrefslogtreecommitdiff
path: root/src
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 183c693e3..b662788b3 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 23bf7425a..50cb5fc90 100644
--- a/src/core/hle/kernel/k_thread.cpp
+++ b/src/core/hle/kernel/k_thread.cpp
@@ -480,9 +480,7 @@ void KThread::Unpin() {
480 480
481 // Resume any threads that began waiting on us while we were pinned. 481 // Resume any threads that began waiting on us while we were pinned.
482 for (auto it = pinned_waiter_list.begin(); it != pinned_waiter_list.end(); ++it) { 482 for (auto it = pinned_waiter_list.begin(); it != pinned_waiter_list.end(); ++it) {
483 if (it->GetState() == ThreadState::Waiting) { 483 it->EndWait(ResultSuccess);
484 it->SetState(ThreadState::Runnable);
485 }
486 } 484 }
487} 485}
488 486
@@ -877,6 +875,7 @@ void KThread::AddWaiterImpl(KThread* thread) {
877 // Keep track of how many kernel waiters we have. 875 // Keep track of how many kernel waiters we have.
878 if (IsKernelAddressKey(thread->GetAddressKey())) { 876 if (IsKernelAddressKey(thread->GetAddressKey())) {
879 ASSERT((num_kernel_waiters++) >= 0); 877 ASSERT((num_kernel_waiters++) >= 0);
878 KScheduler::SetSchedulerUpdateNeeded(kernel);
880 } 879 }
881 880
882 // Insert the waiter. 881 // Insert the waiter.
@@ -890,6 +889,7 @@ void KThread::RemoveWaiterImpl(KThread* thread) {
890 // Keep track of how many kernel waiters we have. 889 // Keep track of how many kernel waiters we have.
891 if (IsKernelAddressKey(thread->GetAddressKey())) { 890 if (IsKernelAddressKey(thread->GetAddressKey())) {
892 ASSERT((num_kernel_waiters--) > 0); 891 ASSERT((num_kernel_waiters--) > 0);
892 KScheduler::SetSchedulerUpdateNeeded(kernel);
893 } 893 }
894 894
895 // Remove the waiter. 895 // Remove the waiter.
@@ -965,6 +965,7 @@ KThread* KThread::RemoveWaiterByKey(s32* out_num_waiters, VAddr key) {
965 // Keep track of how many kernel waiters we have. 965 // Keep track of how many kernel waiters we have.
966 if (IsKernelAddressKey(thread->GetAddressKey())) { 966 if (IsKernelAddressKey(thread->GetAddressKey())) {
967 ASSERT((num_kernel_waiters--) > 0); 967 ASSERT((num_kernel_waiters--) > 0);
968 KScheduler::SetSchedulerUpdateNeeded(kernel);
968 } 969 }
969 it = waiter_list.erase(it); 970 it = waiter_list.erase(it);
970 971