diff options
| author | 2015-01-14 19:22:50 -0500 | |
|---|---|---|
| committer | 2015-01-21 18:41:00 -0500 | |
| commit | c22bac6398ff1705992fc44b2c29775c84cff662 (patch) | |
| tree | e20da7e6e1824c19b7ced73f43815397749ffae7 /src/core/hle/kernel/kernel.cpp | |
| parent | Merge pull request #491 from archshift/hidspvr (diff) | |
| download | yuzu-c22bac6398ff1705992fc44b2c29775c84cff662.tar.gz yuzu-c22bac6398ff1705992fc44b2c29775c84cff662.tar.xz yuzu-c22bac6398ff1705992fc44b2c29775c84cff662.zip | |
Kernel: Added WaitObject and changed "waitable" objects inherit from it.
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index d3684896f..07e96e633 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -18,6 +18,32 @@ SharedPtr<Thread> g_main_thread = nullptr; | |||
| 18 | HandleTable g_handle_table; | 18 | HandleTable g_handle_table; |
| 19 | u64 g_program_id = 0; | 19 | u64 g_program_id = 0; |
| 20 | 20 | ||
| 21 | void WaitObject::AddWaitingThread(Thread* thread) { | ||
| 22 | if (std::find(waiting_threads.begin(), waiting_threads.end(), thread) == waiting_threads.end()) { | ||
| 23 | waiting_threads.push_back(thread); | ||
| 24 | } | ||
| 25 | } | ||
| 26 | |||
| 27 | Thread* WaitObject::ResumeNextThread() { | ||
| 28 | if (waiting_threads.empty()) return nullptr; | ||
| 29 | |||
| 30 | auto next_thread = waiting_threads.front(); | ||
| 31 | |||
| 32 | next_thread->ResumeFromWait(); | ||
| 33 | waiting_threads.erase(waiting_threads.begin()); | ||
| 34 | |||
| 35 | return next_thread.get(); | ||
| 36 | } | ||
| 37 | |||
| 38 | void WaitObject::ReleaseAllWaitingThreads() { | ||
| 39 | auto waiting_threads_copy = waiting_threads; | ||
| 40 | |||
| 41 | for (auto thread : waiting_threads_copy) | ||
| 42 | thread->ReleaseWaitObject(this); | ||
| 43 | |||
| 44 | waiting_threads.clear(); | ||
| 45 | } | ||
| 46 | |||
| 21 | HandleTable::HandleTable() { | 47 | HandleTable::HandleTable() { |
| 22 | next_generation = 1; | 48 | next_generation = 1; |
| 23 | Clear(); | 49 | Clear(); |