diff options
| author | 2022-07-07 17:31:49 -0400 | |
|---|---|---|
| committer | 2022-07-07 17:31:49 -0400 | |
| commit | 7e75593c20bd0ad3cbb4915ee18bc7a3392f5651 (patch) | |
| tree | f0d9c1ffb8093eb36d05cee6f694d343e9d5edf8 /src | |
| parent | Merge pull request #8492 from german77/no_more_errors (diff) | |
| parent | kernel: clean up waiting implementation (diff) | |
| download | yuzu-7e75593c20bd0ad3cbb4915ee18bc7a3392f5651.tar.gz yuzu-7e75593c20bd0ad3cbb4915ee18bc7a3392f5651.tar.xz yuzu-7e75593c20bd0ad3cbb4915ee18bc7a3392f5651.zip | |
Merge pull request #8502 from liamwhite/end-wait
kernel: clean up waiting implementation
Diffstat (limited to 'src')
| -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 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 | ||