From 0ad9658eb201a73ab30518c0de84bc01e36da322 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 13 Apr 2013 00:35:24 -0700 Subject: [PATCH] Increment wakeupCount when a thread is pending. It might've been woken up but just not run yet. That doesn't mean it should not have wakeupCount incremented. Fixes Tales of Eternia freezing before world map. --- Core/HLE/sceKernelThread.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Core/HLE/sceKernelThread.cpp b/Core/HLE/sceKernelThread.cpp index b80d310b05..5c1f165ce8 100644 --- a/Core/HLE/sceKernelThread.cpp +++ b/Core/HLE/sceKernelThread.cpp @@ -2238,11 +2238,12 @@ void sceKernelWakeupThread() Thread *t = kernelObjects.Get(uid, error); if (t) { - if (t->nt.waitType != WAITTYPE_SLEEP) { + if (!t->isWaitingFor(WAITTYPE_SLEEP, 1)) { t->nt.wakeupCount++; DEBUG_LOG(HLE,"sceKernelWakeupThread(%i) - wakeupCount incremented to %i", uid, t->nt.wakeupCount); RETURN(0); } else { + VERBOSE_LOG(HLE,"sceKernelWakeupThread(%i) - woke thread at %i", uid, t->nt.wakeupCount); __KernelResumeThreadFromWait(uid); } } @@ -2286,7 +2287,7 @@ static void __KernelSleepThread(bool doCallbacks) { } else { VERBOSE_LOG(HLE, "sceKernelSleepThread()"); RETURN(0); - __KernelWaitCurThread(WAITTYPE_SLEEP, 0, 0, 0, doCallbacks, "thread slept"); + __KernelWaitCurThread(WAITTYPE_SLEEP, 1, 0, 0, doCallbacks, "thread slept"); } }