mirror of
https://github.com/libretro/ppsspp.git
synced 2024-11-26 01:40:24 +00:00
Implement sceKernelReleaseWaitThread().
This commit is contained in:
parent
0eb13142aa
commit
1f21ea4236
@ -549,7 +549,7 @@ const HLEFunction ThreadManForUser[] =
|
|||||||
{0x52089CA1,sceKernelGetThreadStackFreeSize,"sceKernelGetThreadStackFreeSize"},
|
{0x52089CA1,sceKernelGetThreadStackFreeSize,"sceKernelGetThreadStackFreeSize"},
|
||||||
{0xFFC36A14,WrapU_UU<sceKernelReferThreadRunStatus>,"sceKernelReferThreadRunStatus"},
|
{0xFFC36A14,WrapU_UU<sceKernelReferThreadRunStatus>,"sceKernelReferThreadRunStatus"},
|
||||||
{0x17c1684e,WrapU_UU<sceKernelReferThreadStatus>,"sceKernelReferThreadStatus"},
|
{0x17c1684e,WrapU_UU<sceKernelReferThreadStatus>,"sceKernelReferThreadStatus"},
|
||||||
{0x2C34E053,0,"sceKernelReleaseWaitThread"},
|
{0x2C34E053,WrapI_I<sceKernelReleaseWaitThread>,"sceKernelReleaseWaitThread"},
|
||||||
{0x75156e8f,sceKernelResumeThread,"sceKernelResumeThread"},
|
{0x75156e8f,sceKernelResumeThread,"sceKernelResumeThread"},
|
||||||
{0x3ad58b8c,&WrapU_V<sceKernelSuspendDispatchThread>,"sceKernelSuspendDispatchThread"},
|
{0x3ad58b8c,&WrapU_V<sceKernelSuspendDispatchThread>,"sceKernelSuspendDispatchThread"},
|
||||||
{0x27e22ec2,&WrapU_U<sceKernelResumeDispatchThread>,"sceKernelResumeDispatchThread"},
|
{0x27e22ec2,&WrapU_U<sceKernelResumeDispatchThread>,"sceKernelResumeDispatchThread"},
|
||||||
|
@ -1908,7 +1908,34 @@ int sceKernelWaitThreadEndCB(SceUID threadID, u32 timeoutPtr)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ERROR_LOG(HLE,"sceKernelWaitThreadEnd - bad thread %i", threadID);
|
ERROR_LOG(HLE, "sceKernelWaitThreadEnd - bad thread %i", threadID);
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int sceKernelReleaseWaitThread(SceUID threadID)
|
||||||
|
{
|
||||||
|
DEBUG_LOG(HLE, "sceKernelReleaseWaitThread(%i)", threadID);
|
||||||
|
if (__KernelInCallback())
|
||||||
|
WARN_LOG(HLE, "UNTESTED sceKernelReleaseWaitThread() might not do the right thing in a callback");
|
||||||
|
|
||||||
|
if (threadID == 0 || threadID == currentThread)
|
||||||
|
return SCE_KERNEL_ERROR_ILLEGAL_THID;
|
||||||
|
|
||||||
|
u32 error;
|
||||||
|
Thread *t = kernelObjects.Get<Thread>(threadID, error);
|
||||||
|
if (t)
|
||||||
|
{
|
||||||
|
if (!t->isWaiting())
|
||||||
|
return SCE_KERNEL_ERROR_NOT_WAIT;
|
||||||
|
|
||||||
|
__KernelResumeThreadFromWait(threadID, SCE_KERNEL_ERROR_RELEASE_WAIT);
|
||||||
|
hleReSchedule("thread released from wait");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ERROR_LOG(HLE, "sceKernelReleaseWaitThread - bad thread %i", threadID);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ u32 sceKernelResumeDispatchThread(u32 suspended);
|
|||||||
int sceKernelWaitThreadEnd(SceUID threadID, u32 timeoutPtr);
|
int sceKernelWaitThreadEnd(SceUID threadID, u32 timeoutPtr);
|
||||||
u32 sceKernelReferThreadStatus(u32 uid, u32 statusPtr);
|
u32 sceKernelReferThreadStatus(u32 uid, u32 statusPtr);
|
||||||
u32 sceKernelReferThreadRunStatus(u32 uid, u32 statusPtr);
|
u32 sceKernelReferThreadRunStatus(u32 uid, u32 statusPtr);
|
||||||
|
int sceKernelReleaseWaitThread(SceUID threadID);
|
||||||
void sceKernelChangeCurrentThreadAttr();
|
void sceKernelChangeCurrentThreadAttr();
|
||||||
void sceKernelRotateThreadReadyQueue();
|
void sceKernelRotateThreadReadyQueue();
|
||||||
void sceKernelCheckThreadStack();
|
void sceKernelCheckThreadStack();
|
||||||
|
Loading…
Reference in New Issue
Block a user