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"},
|
{0xCD203292,sceKernelCancelEventFlag, "sceKernelCancelEventFlag"},
|
||||||
{0xA66B0120,sceKernelReferEventFlagStatus,"sceKernelReferEventFlagStatus"},
|
{0xA66B0120,sceKernelReferEventFlagStatus,"sceKernelReferEventFlagStatus"},
|
||||||
|
|
||||||
{0x8FFDF9A2,sceKernelCancelSema, "sceKernelCancelSema"},
|
{0x8FFDF9A2,&WrapI_IIU<sceKernelCancelSema>, "sceKernelCancelSema"},
|
||||||
{0xD6DA4BA1,sceKernelCreateSema, "sceKernelCreateSema"},
|
{0xD6DA4BA1,sceKernelCreateSema, "sceKernelCreateSema"},
|
||||||
{0x28b6489c,sceKernelDeleteSema, "sceKernelDeleteSema"},
|
{0x28b6489c,&WrapI_I<sceKernelDeleteSema>, "sceKernelDeleteSema"},
|
||||||
{0x58b1f937,&WrapI_II<sceKernelPollSema>, "sceKernelPollSema"},
|
{0x58b1f937,&WrapI_II<sceKernelPollSema>, "sceKernelPollSema"},
|
||||||
{0xBC6FEBC5,&WrapI_IU<sceKernelReferSemaStatus>, "sceKernelReferSemaStatus"},
|
{0xBC6FEBC5,&WrapI_IU<sceKernelReferSemaStatus>, "sceKernelReferSemaStatus"},
|
||||||
{0x3F53E640,&WrapI_II<sceKernelSignalSema>, "sceKernelSignalSema"},
|
{0x3F53E640,&WrapI_II<sceKernelSignalSema>, "sceKernelSignalSema"},
|
||||||
|
|
|
@ -57,11 +57,10 @@ struct Semaphore : public KernelObject
|
||||||
std::vector<SceUID> waitingThreads;
|
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);
|
ERROR_LOG(HLE,"UNIMPL sceKernelCancelSema(%i)", id);
|
||||||
RETURN(0);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//SceUID sceKernelCreateSema(const char *name, SceUInt attr, int initVal, int maxVal, SceKernelSemaOptParam *option);
|
//SceUID sceKernelCreateSema(const char *name, SceUInt attr, int initVal, int maxVal, SceKernelSemaOptParam *option);
|
||||||
|
@ -86,9 +85,8 @@ void sceKernelCreateSema()
|
||||||
}
|
}
|
||||||
|
|
||||||
//int sceKernelDeleteSema(SceUID semaid);
|
//int sceKernelDeleteSema(SceUID semaid);
|
||||||
void sceKernelDeleteSema()
|
int sceKernelDeleteSema(SceUID id)
|
||||||
{
|
{
|
||||||
SceUID id = PARAM(0);
|
|
||||||
DEBUG_LOG(HLE,"sceKernelDeleteSema(%i)", id);
|
DEBUG_LOG(HLE,"sceKernelDeleteSema(%i)", id);
|
||||||
|
|
||||||
u32 error;
|
u32 error;
|
||||||
|
@ -102,6 +100,7 @@ void sceKernelDeleteSema()
|
||||||
{
|
{
|
||||||
SceUID threadID = *iter;
|
SceUID threadID = *iter;
|
||||||
|
|
||||||
|
// TODO: Set SCE_KERNEL_ERROR_WAIT_DELETE returnValue?
|
||||||
__KernelResumeThreadFromWait(threadID);
|
__KernelResumeThreadFromWait(threadID);
|
||||||
wokeThreads = true;
|
wokeThreads = true;
|
||||||
}
|
}
|
||||||
|
@ -109,14 +108,14 @@ void sceKernelDeleteSema()
|
||||||
|
|
||||||
// TODO: Should this reschedule? threads/semaphores fails if it doesn't.
|
// TODO: Should this reschedule? threads/semaphores fails if it doesn't.
|
||||||
if (wokeThreads)
|
if (wokeThreads)
|
||||||
__KernelReSchedule("semaphore signalled");
|
__KernelReSchedule("semaphore deleted");
|
||||||
|
|
||||||
RETURN(kernelObjects.Destroy<Semaphore>(id));
|
return kernelObjects.Destroy<Semaphore>(id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ERROR_LOG(HLE, "sceKernelSignalSema : Trying to signal invalid semaphore %i", id);
|
ERROR_LOG(HLE, "sceKernelDeleteSema : Trying to delete invalid semaphore %i", id);
|
||||||
RETURN(error);
|
return error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,9 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
void sceKernelCancelSema();
|
int sceKernelCancelSema(SceUID id, int newCount, u32 numWaitThreadsPtr);
|
||||||
void sceKernelCreateSema();
|
void sceKernelCreateSema();
|
||||||
void sceKernelDeleteSema();
|
int sceKernelDeleteSema(SceUID id);
|
||||||
int sceKernelPollSema(SceUID id, int wantedCount);
|
int sceKernelPollSema(SceUID id, int wantedCount);
|
||||||
int sceKernelReferSemaStatus(SceUID id, u32 infoPtr);
|
int sceKernelReferSemaStatus(SceUID id, u32 infoPtr);
|
||||||
int sceKernelSignalSema(SceUID id, int signal);
|
int sceKernelSignalSema(SceUID id, int signal);
|
||||||
|
|
Loading…
Add table
Reference in a new issue