static bool __KernelCheckResumeMsgPipeReceive(MsgPipe *m, MsgPipeWaitingThread &waitInfo, u32 &error, int result, bool &wokeThreads) { if (!waitInfo.IsStillWaiting(m->GetUID())) return true; bool needsResched = false; bool needsWait = false; result = __KernelReceiveMsgPipe(m, waitInfo.bufAddr, waitInfo.bufSize, waitInfo.waitMode, waitInfo.transferredBytes.ptr, 0, true, false, needsResched, needsWait); if (needsResched) hleReSchedule(true, "msgpipe data received"); if (needsWait) return false; waitInfo.Complete(m->GetUID(), result); wokeThreads = true; return true; }
static bool __KernelCheckResumeMsgPipeSend(MsgPipe *m, MsgPipeWaitingThread &waitInfo, u32 &error, int result, bool &wokeThreads) { if (!waitInfo.IsStillWaiting(m->GetUID())) return true; bool needsResched = false; bool needsWait = false; result = __KernelSendMsgPipe(m, waitInfo.bufAddr, waitInfo.bufSize, waitInfo.waitMode, waitInfo.transferredBytes.ptr, 0, true, false, needsResched, needsWait); if (needsResched) hleReSchedule(true, "msgpipe data sent"); // Could not wake up. May have sent some stuff. if (needsWait) return false; waitInfo.Complete(m->GetUID(), result); wokeThreads = true; return true; }