private int _sceKernelWaitSemaCB(SemaphoreId SemaphoreId, int Signal, uint* Timeout, bool HandleCallbacks)
{
var CurrentThread = ThreadManager.Current;
var Semaphore = GetSemaphoreById(SemaphoreId);
bool TimedOut = false;
CurrentThread.SetWaitAndPrepareWakeUp(HleThread.WaitType.Semaphore, String.Format("sceKernelWaitSema('{0}')", Semaphore.Name), Semaphore, WakeUpCallback =>
{
PspRtc.RegisterTimeout(Timeout, () => { TimedOut = true; WakeUpCallback(); });
Semaphore.WaitThread(CurrentThread, () =>
{
WakeUpCallback();
//ThreadManager.ScheduleNext(CurrentThread);
}, Signal);
}, HandleCallbacks: HandleCallbacks);
if (TimedOut)
{
throw (new SceKernelException(SceKernelErrors.ERROR_KERNEL_WAIT_TIMEOUT));
}
return 0;
}