diff --git a/Core/HLE/sceKernelThread.cpp b/Core/HLE/sceKernelThread.cpp index be4159c09e..1235c8230f 100644 --- a/Core/HLE/sceKernelThread.cpp +++ b/Core/HLE/sceKernelThread.cpp @@ -1361,8 +1361,11 @@ bool __KernelSwitchToThread(SceUID threadID, const char *reason) u32 error; Thread *t = kernelObjects.Get(threadID, error); if (!t) - ERROR_LOG(SCEKERNEL, "__KernelSwitchToThread: %x doesn't exist", threadID) - else + { + ERROR_LOG_REPORT(SCEKERNEL, "__KernelSwitchToThread: %x doesn't exist", threadID); + hleReSchedule("switch to deleted thread"); + } + else if (t->isReady() || t->isRunning()) { Thread *current = __GetCurrentThread(); if (current && current->isRunning()) @@ -1371,6 +1374,10 @@ bool __KernelSwitchToThread(SceUID threadID, const char *reason) __KernelSwitchContext(t, reason); return true; } + else + { + hleReSchedule("switch to waiting thread"); + } return false; }