diff --git a/src/core/kernel/threads.cpp b/src/core/kernel/threads.cpp index 8712c5af..fa10a2ea 100644 --- a/src/core/kernel/threads.cpp +++ b/src/core/kernel/threads.cpp @@ -150,9 +150,9 @@ void Kernel::sleepThread(s64 ns) { if (ns < 0) { Helpers::panic("Sleeping a thread for a negative amount of ns"); } else if (ns == 0) { // Used when we want to force a thread switch - // TODO: Does sleep(0) always switch to another thread, or can it return to the same one if it's the highest prio one? - threads[currentThreadIndex].status = ThreadStatus::Ready; - switchToNextThread(); + int curr = currentThreadIndex; + switchToNextThread(); // Mark thread as ready after switching, to avoid switching to the same thread + threads[curr].status = ThreadStatus::Ready; } else { // If we're sleeping for > 0 ns Thread& t = threads[currentThreadIndex]; t.status = ThreadStatus::WaitSleep;