Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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();
            }
        }