diff options
Diffstat (limited to '')
| -rw-r--r-- | src/core/hle/kernel/k_process.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_thread.cpp | 7 |
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 | ||