Ignore deleted callbacks early in the chain.

This also ensures they won't prevent future callbacks from running.
This commit is contained in:
Unknown W. Brackets committed 2012-12-09 21:39:56 -08:00
1 parent b02224615f
commit a218dcc0f0
1 file changed
+11 -2
+11 -2
View File
@@ -1943,8 +1943,17 @@ bool __KernelCheckThreadCallbacks(Thread *thread, bool force)
if (thread->readyCallbacks[i].size()) {
SceUID readyCallback = thread->readyCallbacks[i].front();
thread->readyCallbacks[i].pop_front();
__KernelRunCallbackOnThread(readyCallback, thread, !force); // makes pending
return true;
// If the callback was deleted, we're good. Just skip it.
if (kernelObjects.IsValid(readyCallback))
{
__KernelRunCallbackOnThread(readyCallback, thread, !force); // makes pending
return true;
}
else
{
WARN_LOG(HLE, "Ignoring deleted callback %08x", readyCallback);
}
}
}
return false;