void AddWaitingThread(SceUID id, u32 addr) { bool inserted = false; if (nmb.attr & SCE_KERNEL_MBA_THPRI) { for (std::vector<MbxWaitingThread>::iterator it = waitingThreads.begin(); it != waitingThreads.end(); it++) { if (__KernelGetThreadPrio(id) < __KernelGetThreadPrio((*it).first)) { waitingThreads.insert(it, std::make_pair(id, addr)); inserted = true; break; } } } if (!inserted) waitingThreads.push_back(std::make_pair(id, addr)); }
void AddWaitingThread(SceUID id, u32 addr) { if (nmb.attr & SCE_KERNEL_MBA_THPRI) { for (std::vector<std::pair<SceUID, u32>>::iterator it = waitingThreads.begin(); it != waitingThreads.end(); it++) { if (__KernelGetThreadPrio(id) >= __KernelGetThreadPrio((*it).first)) { waitingThreads.insert(it, std::make_pair(id, addr)); break; } } } else { waitingThreads.push_back(std::make_pair(id, addr)); } }
void AddWaitingThread(SceUID id, u32 addr) { bool inserted = false; if (nmb.attr & SCE_KERNEL_MBA_THPRI) { for (std::vector<MbxWaitingThread>::iterator it = waitingThreads.begin(); it != waitingThreads.end(); it++) { if (__KernelGetThreadPrio(id) < __KernelGetThreadPrio(it->threadID)) { MbxWaitingThread waiting = {id, addr}; waitingThreads.insert(it, waiting); inserted = true; break; } } } if (!inserted) { MbxWaitingThread waiting = {id, addr}; waitingThreads.push_back(waiting); } }
std::vector<MbxWaitingThread>::iterator __KernelMbxFindPriority(std::vector<MbxWaitingThread> &waiting) { _dbg_assert_msg_(HLE, !waiting.empty(), "__KernelMutexFindPriority: Trying to find best of no threads."); std::vector<MbxWaitingThread>::iterator iter, end, best = waiting.end(); u32 best_prio = 0xFFFFFFFF; for (iter = waiting.begin(), end = waiting.end(); iter != end; ++iter) { u32 iter_prio = __KernelGetThreadPrio(iter->first); if (iter_prio < best_prio) { best = iter; best_prio = iter_prio; } } _dbg_assert_msg_(HLE, best != waiting.end(), "__KernelMutexFindPriority: Returning invalid best thread."); return best; }
std::vector<SceUID>::iterator __KernelSemaFindPriority(std::vector<SceUID> &waiting, std::vector<SceUID>::iterator begin) { _dbg_assert_msg_(HLE, !waiting.empty(), "__KernelSemaFindPriority: Trying to find best of no threads."); std::vector<SceUID>::iterator iter, end, best = waiting.end(); u32 best_prio = 0xFFFFFFFF; for (iter = begin, end = waiting.end(); iter != end; ++iter) { u32 iter_prio = __KernelGetThreadPrio(*iter); if (iter_prio < best_prio) { best = iter; best_prio = iter_prio; } } _dbg_assert_msg_(HLE, best != waiting.end(), "__KernelSemaFindPriority: Returning invalid best thread."); return best; }