citra-emu
/
citra-canary
Archived
1
0
Fork 0

WaitObject: Added RemoveWaitingThread, fixed a bug, and cleanup.

This commit is contained in:
bunnei 2015-01-14 23:19:22 -05:00
parent c22bac6398
commit 5e77e2e1de
2 changed files with 17 additions and 4 deletions

View File

@ -19,13 +19,20 @@ HandleTable g_handle_table;
u64 g_program_id = 0; u64 g_program_id = 0;
void WaitObject::AddWaitingThread(Thread* thread) { void WaitObject::AddWaitingThread(Thread* thread) {
if (std::find(waiting_threads.begin(), waiting_threads.end(), thread) == waiting_threads.end()) { auto itr = std::find(waiting_threads.begin(), waiting_threads.end(), thread);
if (itr == waiting_threads.end())
waiting_threads.push_back(thread); waiting_threads.push_back(thread);
} }
void WaitObject::RemoveWaitingThread(Thread* thread) {
auto itr = std::find(waiting_threads.begin(), waiting_threads.end(), thread);
if (itr != waiting_threads.end())
waiting_threads.erase(itr);
} }
Thread* WaitObject::ResumeNextThread() { Thread* WaitObject::ResumeNextThread() {
if (waiting_threads.empty()) return nullptr; if (waiting_threads.empty())
return nullptr;
auto next_thread = waiting_threads.front(); auto next_thread = waiting_threads.front();

View File

@ -105,7 +105,13 @@ public:
void AddWaitingThread(Thread* thread); void AddWaitingThread(Thread* thread);
/** /**
* Resumes the next thread waiting on this object * Removes a thread from waiting on this object (e.g. if it was resumed already)
* @param thread Pointer to thread to remove
*/
void RemoveWaitingThread(Thread* thead);
/**
* Resumes (and removes) the next thread waiting on this object
* @return Pointer to the thread that was resumed, nullptr if no threads are waiting * @return Pointer to the thread that was resumed, nullptr if no threads are waiting
*/ */
Thread* ResumeNextThread(); Thread* ResumeNextThread();