diff options
| author | 2015-02-02 13:04:04 -0500 | |
|---|---|---|
| committer | 2015-02-02 13:04:04 -0500 | |
| commit | 7f730ed158bc9bba064100b9644b318134ef0bb3 (patch) | |
| tree | c4181a69ff882e1af1b7d65bf3596a6cb3dd88b9 /src/core/hle/kernel/kernel.cpp | |
| parent | Merge pull request #517 from bunnei/blend-factors (diff) | |
| parent | Kernel: Stop creating useless Handles during object creation (diff) | |
| download | yuzu-7f730ed158bc9bba064100b9644b318134ef0bb3.tar.gz yuzu-7f730ed158bc9bba064100b9644b318134ef0bb3.tar.xz yuzu-7f730ed158bc9bba064100b9644b318134ef0bb3.zip | |
Merge pull request #523 from yuriks/kernel-lifetime5
Kernel Lifetime Reform Pt. 5: The Reckoning
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index d7fa4dcea..7e0b9542e 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -14,14 +14,16 @@ | |||
| 14 | 14 | ||
| 15 | namespace Kernel { | 15 | namespace Kernel { |
| 16 | 16 | ||
| 17 | unsigned int Object::next_object_id = 0; | ||
| 18 | |||
| 17 | SharedPtr<Thread> g_main_thread = nullptr; | 19 | SharedPtr<Thread> g_main_thread = nullptr; |
| 18 | HandleTable g_handle_table; | 20 | HandleTable g_handle_table; |
| 19 | u64 g_program_id = 0; | 21 | u64 g_program_id = 0; |
| 20 | 22 | ||
| 21 | void WaitObject::AddWaitingThread(Thread* thread) { | 23 | void WaitObject::AddWaitingThread(SharedPtr<Thread> thread) { |
| 22 | auto itr = std::find(waiting_threads.begin(), waiting_threads.end(), thread); | 24 | auto itr = std::find(waiting_threads.begin(), waiting_threads.end(), thread); |
| 23 | if (itr == waiting_threads.end()) | 25 | if (itr == waiting_threads.end()) |
| 24 | waiting_threads.push_back(thread); | 26 | waiting_threads.push_back(std::move(thread)); |
| 25 | } | 27 | } |
| 26 | 28 | ||
| 27 | void WaitObject::RemoveWaitingThread(Thread* thread) { | 29 | void WaitObject::RemoveWaitingThread(Thread* thread) { |
| @@ -30,11 +32,11 @@ void WaitObject::RemoveWaitingThread(Thread* thread) { | |||
| 30 | waiting_threads.erase(itr); | 32 | waiting_threads.erase(itr); |
| 31 | } | 33 | } |
| 32 | 34 | ||
| 33 | Thread* WaitObject::WakeupNextThread() { | 35 | SharedPtr<Thread> WaitObject::WakeupNextThread() { |
| 34 | if (waiting_threads.empty()) | 36 | if (waiting_threads.empty()) |
| 35 | return nullptr; | 37 | return nullptr; |
| 36 | 38 | ||
| 37 | auto next_thread = waiting_threads.front(); | 39 | auto next_thread = std::move(waiting_threads.front()); |
| 38 | waiting_threads.erase(waiting_threads.begin()); | 40 | waiting_threads.erase(waiting_threads.begin()); |
| 39 | 41 | ||
| 40 | next_thread->ReleaseWaitObject(this); | 42 | next_thread->ReleaseWaitObject(this); |
| @@ -74,13 +76,10 @@ ResultVal<Handle> HandleTable::Create(SharedPtr<Object> obj) { | |||
| 74 | // CTR-OS doesn't use generation 0, so skip straight to 1. | 76 | // CTR-OS doesn't use generation 0, so skip straight to 1. |
| 75 | if (next_generation >= (1 << 15)) next_generation = 1; | 77 | if (next_generation >= (1 << 15)) next_generation = 1; |
| 76 | 78 | ||
| 77 | Handle handle = generation | (slot << 15); | ||
| 78 | if (obj->handle == INVALID_HANDLE) | ||
| 79 | obj->handle = handle; | ||
| 80 | |||
| 81 | generations[slot] = generation; | 79 | generations[slot] = generation; |
| 82 | objects[slot] = std::move(obj); | 80 | objects[slot] = std::move(obj); |
| 83 | 81 | ||
| 82 | Handle handle = generation | (slot << 15); | ||
| 84 | return MakeResult<Handle>(handle); | 83 | return MakeResult<Handle>(handle); |
| 85 | } | 84 | } |
| 86 | 85 | ||
| @@ -102,7 +101,7 @@ ResultCode HandleTable::Close(Handle handle) { | |||
| 102 | 101 | ||
| 103 | objects[slot] = nullptr; | 102 | objects[slot] = nullptr; |
| 104 | 103 | ||
| 105 | generations[generation] = next_free_slot; | 104 | generations[slot] = next_free_slot; |
| 106 | next_free_slot = slot; | 105 | next_free_slot = slot; |
| 107 | return RESULT_SUCCESS; | 106 | return RESULT_SUCCESS; |
| 108 | } | 107 | } |