private void onMbxDeletedCancelled(int mbxid, int result) { ThreadManForUser threadMan = Modules.ThreadManForUserModule; bool reschedule = false; for (IEnumerator <SceKernelThreadInfo> it = threadMan.GetEnumerator(); it.MoveNext();) { SceKernelThreadInfo thread = it.Current; if (thread.isWaitingFor(PSP_WAIT_MBX, mbxid)) { thread.cpuContext._v0 = result; threadMan.hleChangeThreadState(thread, PSP_THREAD_READY); reschedule = true; } } // Reschedule only if threads waked up. if (reschedule) { threadMan.hleRescheduleCurrentThread(); } }
private void onLwMutexDeleted(int lwmid) { ThreadManForUser threadMan = Modules.ThreadManForUserModule; bool reschedule = false; for (IEnumerator <SceKernelThreadInfo> it = threadMan.GetEnumerator(); it.MoveNext();) { SceKernelThreadInfo thread = it.Current; if (thread.isWaitingFor(PSP_WAIT_LWMUTEX, lwmid)) { thread.cpuContext._v0 = ERROR_KERNEL_WAIT_DELETE; threadMan.hleChangeThreadState(thread, PSP_THREAD_READY); reschedule = true; } } // Reschedule only if threads waked up. if (reschedule) { threadMan.hleRescheduleCurrentThread(); } }