summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/thread.cpp
diff options
context:
space:
mode:
authorGravatar Subv2015-07-20 17:15:54 -0500
committerGravatar Subv2015-07-20 17:15:54 -0500
commit275aaeef9c94db25a4a52cfcda1dac0dcc9e6c06 (patch)
tree0d16a2c8a80e8d68f6de41564cde6a141402f946 /src/core/hle/kernel/thread.cpp
parentMerge pull request #939 from Subv/queryprocmem (diff)
downloadyuzu-275aaeef9c94db25a4a52cfcda1dac0dcc9e6c06.tar.gz
yuzu-275aaeef9c94db25a4a52cfcda1dac0dcc9e6c06.tar.xz
yuzu-275aaeef9c94db25a4a52cfcda1dac0dcc9e6c06.zip
Kernel/Scheduling: Clean up a thread's wait_objects when its scheduled.
They'll be reset if needed during the next svcWaitSynchronization call (if there's any pending)
Diffstat (limited to 'src/core/hle/kernel/thread.cpp')
-rw-r--r--src/core/hle/kernel/thread.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index 64166ab99..8b49fc7df 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -217,6 +217,14 @@ static void SwitchContext(Thread* new_thread) {
217 new_thread->context.pc -= thumb_mode ? 2 : 4; 217 new_thread->context.pc -= thumb_mode ? 2 : 4;
218 } 218 }
219 219
220 // Clean up the thread's wait_objects, they'll be restored if needed during
221 // the svcWaitSynchronization call
222 for (int i = 0; i < new_thread->wait_objects.size(); ++i) {
223 SharedPtr<WaitObject> object = new_thread->wait_objects[i];
224 object->RemoveWaitingThread(new_thread);
225 }
226 new_thread->wait_objects.clear();
227
220 ready_queue.remove(new_thread->current_priority, new_thread); 228 ready_queue.remove(new_thread->current_priority, new_thread);
221 new_thread->status = THREADSTATUS_RUNNING; 229 new_thread->status = THREADSTATUS_RUNNING;
222 230