mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Wrap sceKernel DeleteSema and CancelSema.
Also fix copy/paste mistake from SignalSema func.
This commit is contained in:
parent
70809bf1f5
commit
e7b6487c4e
3 changed files with 13 additions and 14 deletions
|
@ -330,9 +330,9 @@ const HLEFunction ThreadManForUser[] =
|
|||
{0xCD203292,sceKernelCancelEventFlag, "sceKernelCancelEventFlag"},
|
||||
{0xA66B0120,sceKernelReferEventFlagStatus,"sceKernelReferEventFlagStatus"},
|
||||
|
||||
{0x8FFDF9A2,sceKernelCancelSema, "sceKernelCancelSema"},
|
||||
{0xD6DA4BA1,sceKernelCreateSema, "sceKernelCreateSema"},
|
||||
{0x28b6489c,sceKernelDeleteSema, "sceKernelDeleteSema"},
|
||||
{0x8FFDF9A2,&WrapI_IIU<sceKernelCancelSema>, "sceKernelCancelSema"},
|
||||
{0xD6DA4BA1,sceKernelCreateSema, "sceKernelCreateSema"},
|
||||
{0x28b6489c,&WrapI_I<sceKernelDeleteSema>, "sceKernelDeleteSema"},
|
||||
{0x58b1f937,&WrapI_II<sceKernelPollSema>, "sceKernelPollSema"},
|
||||
{0xBC6FEBC5,&WrapI_IU<sceKernelReferSemaStatus>, "sceKernelReferSemaStatus"},
|
||||
{0x3F53E640,&WrapI_II<sceKernelSignalSema>, "sceKernelSignalSema"},
|
||||
|
|
|
@ -57,11 +57,10 @@ struct Semaphore : public KernelObject
|
|||
std::vector<SceUID> waitingThreads;
|
||||
};
|
||||
|
||||
void sceKernelCancelSema()
|
||||
int sceKernelCancelSema(SceUID id, int newCount, u32 numWaitThreadsPtr)
|
||||
{
|
||||
SceUID id = PARAM(0);
|
||||
ERROR_LOG(HLE,"UNIMPL sceKernelCancelSema(%i)", id);
|
||||
RETURN(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//SceUID sceKernelCreateSema(const char *name, SceUInt attr, int initVal, int maxVal, SceKernelSemaOptParam *option);
|
||||
|
@ -86,9 +85,8 @@ void sceKernelCreateSema()
|
|||
}
|
||||
|
||||
//int sceKernelDeleteSema(SceUID semaid);
|
||||
void sceKernelDeleteSema()
|
||||
int sceKernelDeleteSema(SceUID id)
|
||||
{
|
||||
SceUID id = PARAM(0);
|
||||
DEBUG_LOG(HLE,"sceKernelDeleteSema(%i)", id);
|
||||
|
||||
u32 error;
|
||||
|
@ -102,6 +100,7 @@ void sceKernelDeleteSema()
|
|||
{
|
||||
SceUID threadID = *iter;
|
||||
|
||||
// TODO: Set SCE_KERNEL_ERROR_WAIT_DELETE returnValue?
|
||||
__KernelResumeThreadFromWait(threadID);
|
||||
wokeThreads = true;
|
||||
}
|
||||
|
@ -109,14 +108,14 @@ void sceKernelDeleteSema()
|
|||
|
||||
// TODO: Should this reschedule? threads/semaphores fails if it doesn't.
|
||||
if (wokeThreads)
|
||||
__KernelReSchedule("semaphore signalled");
|
||||
__KernelReSchedule("semaphore deleted");
|
||||
|
||||
RETURN(kernelObjects.Destroy<Semaphore>(id));
|
||||
return kernelObjects.Destroy<Semaphore>(id);
|
||||
}
|
||||
else
|
||||
{
|
||||
ERROR_LOG(HLE, "sceKernelSignalSema : Trying to signal invalid semaphore %i", id);
|
||||
RETURN(error);
|
||||
ERROR_LOG(HLE, "sceKernelDeleteSema : Trying to delete invalid semaphore %i", id);
|
||||
return error;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,9 +17,9 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
void sceKernelCancelSema();
|
||||
int sceKernelCancelSema(SceUID id, int newCount, u32 numWaitThreadsPtr);
|
||||
void sceKernelCreateSema();
|
||||
void sceKernelDeleteSema();
|
||||
int sceKernelDeleteSema(SceUID id);
|
||||
int sceKernelPollSema(SceUID id, int wantedCount);
|
||||
int sceKernelReferSemaStatus(SceUID id, u32 infoPtr);
|
||||
int sceKernelSignalSema(SceUID id, int signal);
|
||||
|
|
Loading…
Add table
Reference in a new issue