diff --git a/Core/HLE/HLE.cpp b/Core/HLE/HLE.cpp index e6974855a7..adf2ba12b5 100644 --- a/Core/HLE/HLE.cpp +++ b/Core/HLE/HLE.cpp @@ -378,7 +378,7 @@ inline void hleFinishSyscall(const HLEFunction &info) if ((hleAfterSyscall & HLE_AFTER_SKIP_DEADBEEF) == 0) SetDeadbeefRegs(); - if ((hleAfterSyscall & HLE_AFTER_CURRENT_CALLBACKS) != 0) + if ((hleAfterSyscall & HLE_AFTER_CURRENT_CALLBACKS) != 0 && (hleAfterSyscall & HLE_AFTER_RESCHED_CALLBACKS) == 0) __KernelForceCallbacks(); if ((hleAfterSyscall & HLE_AFTER_RUN_INTERRUPTS) != 0) diff --git a/Core/HLE/sceKernelThread.cpp b/Core/HLE/sceKernelThread.cpp index e040a6255e..73cf66735b 100644 --- a/Core/HLE/sceKernelThread.cpp +++ b/Core/HLE/sceKernelThread.cpp @@ -2758,7 +2758,6 @@ int sceKernelSleepThread() int sceKernelSleepThreadCB() { VERBOSE_LOG(SCEKERNEL, "sceKernelSleepThreadCB()"); - hleCheckCurrentCallbacks(); return __KernelSleepThread(true); } @@ -2810,7 +2809,6 @@ int sceKernelWaitThreadEndCB(SceUID threadID, u32 timeoutPtr) Thread *t = kernelObjects.Get(threadID, error); if (t) { - hleCheckCurrentCallbacks(); if (t->nt.status != THREADSTATUS_DORMANT) { if (Memory::IsValidAddress(timeoutPtr)) @@ -2819,6 +2817,8 @@ int sceKernelWaitThreadEndCB(SceUID threadID, u32 timeoutPtr) t->waitingThreads.push_back(currentThread); __KernelWaitCurThread(WAITTYPE_THREADEND, threadID, 0, timeoutPtr, true, "thread wait end"); } + else + hleCheckCurrentCallbacks(); return t->nt.exitStatus; }