CSPspEmu.Hle.Modules.usersystemlib.Kernel_Library._sceKernelUnlockLwMutex C# (CSharp) Метод

_sceKernelUnlockLwMutex() приватный Метод

private _sceKernelUnlockLwMutex ( SceLwMutexWorkarea workarea, int count ) : int
workarea CSPspEmu.Hle.Modules.threadman.SceLwMutexWorkarea
count int
Результат int
        private int _sceKernelUnlockLwMutex(SceLwMutexWorkarea* workarea, int count)
        {
            return 0;

            if (workarea->uid == -1)
            {
                throw (new SceKernelException(SceKernelErrors.ERROR_KERNEL_LWMUTEX_NOT_FOUND));
            }

            if (count <= 0)
            {
                throw (new SceKernelException(SceKernelErrors.ERROR_KERNEL_ILLEGAL_COUNT));
            }

            if ((workarea->attr & ThreadManForUser.MutexAttributesEnum.AllowRecursive) == 0 && count > 1)
            {
                throw (new SceKernelException(SceKernelErrors.ERROR_KERNEL_ILLEGAL_COUNT));
            }

            if (workarea->lockLevel == 0 || workarea->lockThread != HleThreadManager.Current.Id)
            {
                throw (new SceKernelException(SceKernelErrors.ERROR_KERNEL_LWMUTEX_UNLOCKED));
            }

            if (workarea->lockLevel < count)
            {
                throw (new SceKernelException(SceKernelErrors.ERROR_KERNEL_LWMUTEX_UNLOCK_UNDERFLOW));
            }

            workarea->lockLevel -= count;

            if (workarea->lockLevel == 0)
            {
                HleThreadManager.GetThreadById(workarea->lockThread).WakeUpAndReschedule();
            }

            return 0;
        }