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;
}