summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_thread.cpp
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2022-07-07 23:31:49 +0200
committerGitHub <noreply@github.com>2022-07-07 23:31:49 +0200
commit7e75593c20bd0ad3cbb4915ee18bc7a3392f5651 (patch)
treef0d9c1ffb8093eb36d05cee6f694d343e9d5edf8 /src/core/hle/kernel/k_thread.cpp
parentMerge pull request #8492 from german77/no_more_errors (diff)
parentkernel: clean up waiting implementation (diff)
downloadyuzu-7e75593c20bd0ad3cbb4915ee18bc7a3392f5651.tar
yuzu-7e75593c20bd0ad3cbb4915ee18bc7a3392f5651.tar.gz
yuzu-7e75593c20bd0ad3cbb4915ee18bc7a3392f5651.tar.bz2
yuzu-7e75593c20bd0ad3cbb4915ee18bc7a3392f5651.tar.lz
yuzu-7e75593c20bd0ad3cbb4915ee18bc7a3392f5651.tar.xz
yuzu-7e75593c20bd0ad3cbb4915ee18bc7a3392f5651.tar.zst
yuzu-7e75593c20bd0ad3cbb4915ee18bc7a3392f5651.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/kernel/k_thread.cpp7
1 files changed, 4 insertions, 3 deletions
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() {
// Resume any threads that began waiting on us while we were pinned.
for (auto it = pinned_waiter_list.begin(); it != pinned_waiter_list.end(); ++it) {
- if (it->GetState() == ThreadState::Waiting) {
- it->SetState(ThreadState::Runnable);
- }
+ it->EndWait(ResultSuccess);
}
}
@@ -877,6 +875,7 @@ void KThread::AddWaiterImpl(KThread* thread) {
// Keep track of how many kernel waiters we have.
if (IsKernelAddressKey(thread->GetAddressKey())) {
ASSERT((num_kernel_waiters++) >= 0);
+ KScheduler::SetSchedulerUpdateNeeded(kernel);
}
// Insert the waiter.
@@ -890,6 +889,7 @@ void KThread::RemoveWaiterImpl(KThread* thread) {
// Keep track of how many kernel waiters we have.
if (IsKernelAddressKey(thread->GetAddressKey())) {
ASSERT((num_kernel_waiters--) > 0);
+ KScheduler::SetSchedulerUpdateNeeded(kernel);
}
// Remove the waiter.
@@ -965,6 +965,7 @@ KThread* KThread::RemoveWaiterByKey(s32* out_num_waiters, VAddr key) {
// Keep track of how many kernel waiters we have.
if (IsKernelAddressKey(thread->GetAddressKey())) {
ASSERT((num_kernel_waiters--) > 0);
+ KScheduler::SetSchedulerUpdateNeeded(kernel);
}
it = waiter_list.erase(it);