Resume waiting threads when Mbx is destroyed

This commit is contained in:
Arthur Blot 2012-11-08 21:49:56 +01:00
parent 35c7b411aa
commit c6ec09cf86

View file

@ -86,7 +86,21 @@ SceUID sceKernelCreateMbx(const char *name, int memoryPartition, SceUInt attr, i
int sceKernelDeleteMbx(SceUID id) int sceKernelDeleteMbx(SceUID id)
{ {
u32 error;
Mbx *m = kernelObjects.Get<Mbx>(id, error);
if (m)
{
DEBUG_LOG(HLE, "sceKernelDeleteMbx(%i)", id); DEBUG_LOG(HLE, "sceKernelDeleteMbx(%i)", id);
for (size_t i = 0; i < m->waitingThreads.size(); i++)
{
Memory::Write_U32(0, m->waitingThreads[i].second);
__KernelResumeThreadFromWait(m->waitingThreads[i].first);
}
}
else
{
ERROR_LOG(HLE, "sceKernelDeleteMbx(%i): invalid mbx id", id);
}
return kernelObjects.Destroy<Mbx>(id); return kernelObjects.Destroy<Mbx>(id);
} }