public void Allocate(CpuThreadState CpuThreadState, int Size, PspPointer* AddressPointer, uint* Timeout, bool HandleCallbacks)
{
if (!TryAllocate(CpuThreadState, Size, AddressPointer))
{
bool TimedOut = false;
ThreadManForUser.ThreadManager.Current.SetWaitAndPrepareWakeUp(HleThread.WaitType.Semaphore, "_sceKernelAllocateVplCB", this, (WakeUp) =>
{
ThreadManForUser.PspRtc.RegisterTimeout(Timeout, () =>
{
TimedOut = true;
WakeUp();
});
WaitList.Add(new WaitVariablePoolItem()
{
RequiredSize = Size,
WakeUp = () => {
WakeUp();
Allocate(CpuThreadState, Size, AddressPointer, Timeout, HandleCallbacks);
},
});
}, HandleCallbacks: HandleCallbacks);
if (TimedOut) throw(new SceKernelException(SceKernelErrors.ERROR_KERNEL_WAIT_TIMEOUT));
}
}