Пример #1
0
u32 sceKernelCancelEventFlag(SceUID uid, u32 pattern, u32 numWaitThreadsPtr)
{
	u32 error;
	EventFlag *e = kernelObjects.Get<EventFlag>(uid, error);
	if (e)
	{
		DEBUG_LOG(HLE, "sceKernelCancelEventFlag(%i, %08x, %08x)", uid, pattern, numWaitThreadsPtr);

		e->nef.numWaitThreads = (int) e->waitingThreads.size();
		if (Memory::IsValidAddress(numWaitThreadsPtr))
			Memory::Write_U32(e->nef.numWaitThreads, numWaitThreadsPtr);

		e->nef.currentPattern = pattern;

		if (__KernelClearEventFlagThreads(e, SCE_KERNEL_ERROR_WAIT_CANCEL))
			hleReSchedule("event flag canceled");

		return 0;
	}
	else
	{
		DEBUG_LOG(HLE, "sceKernelCancelEventFlag(%i, %08x, %08x): invalid event flag", uid, pattern, numWaitThreadsPtr);
		return error;
	}
}
Пример #2
0
u32 sceKernelDeleteEventFlag(SceUID uid)
{
	DEBUG_LOG(HLE, "sceKernelDeleteEventFlag(%i)", uid);

	u32 error;
	EventFlag *e = kernelObjects.Get<EventFlag>(uid, error);
	if (e)
	{
		bool wokeThreads = __KernelClearEventFlagThreads(e, SCE_KERNEL_ERROR_WAIT_DELETE);
		if (wokeThreads)
			hleReSchedule("event flag deleted");

		return kernelObjects.Destroy<EventFlag>(uid);
	}
	else
		return error;
}