diff options
Diffstat (limited to 'src/core/hle/kernel')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 11 | ||||
| -rw-r--r-- | src/core/hle/kernel/kernel.h | 5 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.cpp | 10 | ||||
| -rw-r--r-- | src/core/hle/kernel/timer.cpp | 3 |
4 files changed, 20 insertions, 9 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 6261b82b6..fca582bbe 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -14,11 +14,10 @@ | |||
| 14 | 14 | ||
| 15 | namespace Kernel { | 15 | namespace Kernel { |
| 16 | 16 | ||
| 17 | unsigned int Object::next_object_id = 0; | 17 | unsigned int Object::next_object_id; |
| 18 | 18 | SharedPtr<Thread> g_main_thread; | |
| 19 | SharedPtr<Thread> g_main_thread = nullptr; | ||
| 20 | HandleTable g_handle_table; | 19 | HandleTable g_handle_table; |
| 21 | u64 g_program_id = 0; | 20 | u64 g_program_id; |
| 22 | 21 | ||
| 23 | void WaitObject::AddWaitingThread(SharedPtr<Thread> thread) { | 22 | void WaitObject::AddWaitingThread(SharedPtr<Thread> thread) { |
| 24 | auto itr = std::find(waiting_threads.begin(), waiting_threads.end(), thread); | 23 | auto itr = std::find(waiting_threads.begin(), waiting_threads.end(), thread); |
| @@ -138,6 +137,10 @@ void HandleTable::Clear() { | |||
| 138 | void Init() { | 137 | void Init() { |
| 139 | Kernel::ThreadingInit(); | 138 | Kernel::ThreadingInit(); |
| 140 | Kernel::TimersInit(); | 139 | Kernel::TimersInit(); |
| 140 | |||
| 141 | Object::next_object_id = 0; | ||
| 142 | g_program_id = 0; | ||
| 143 | g_main_thread = nullptr; | ||
| 141 | } | 144 | } |
| 142 | 145 | ||
| 143 | /// Shutdown the kernel | 146 | /// Shutdown the kernel |
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index 2d295ea00..ab06fa025 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h | |||
| @@ -95,12 +95,13 @@ public: | |||
| 95 | return false; | 95 | return false; |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | public: | ||
| 99 | static unsigned int next_object_id; | ||
| 100 | |||
| 98 | private: | 101 | private: |
| 99 | friend void intrusive_ptr_add_ref(Object*); | 102 | friend void intrusive_ptr_add_ref(Object*); |
| 100 | friend void intrusive_ptr_release(Object*); | 103 | friend void intrusive_ptr_release(Object*); |
| 101 | 104 | ||
| 102 | static unsigned int next_object_id; | ||
| 103 | |||
| 104 | unsigned int ref_count = 0; | 105 | unsigned int ref_count = 0; |
| 105 | unsigned int object_id = next_object_id++; | 106 | unsigned int object_id = next_object_id++; |
| 106 | }; | 107 | }; |
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 33d66b986..d678f5f6f 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | namespace Kernel { | 23 | namespace Kernel { |
| 24 | 24 | ||
| 25 | /// Event type for the thread wake up event | 25 | /// Event type for the thread wake up event |
| 26 | static int ThreadWakeupEventType = -1; | 26 | static int ThreadWakeupEventType; |
| 27 | 27 | ||
| 28 | bool Thread::ShouldWait() { | 28 | bool Thread::ShouldWait() { |
| 29 | return status != THREADSTATUS_DEAD; | 29 | return status != THREADSTATUS_DEAD; |
| @@ -42,7 +42,7 @@ static Common::ThreadQueueList<Thread*, THREADPRIO_LOWEST+1> ready_queue; | |||
| 42 | static Thread* current_thread; | 42 | static Thread* current_thread; |
| 43 | 43 | ||
| 44 | // The first available thread id at startup | 44 | // The first available thread id at startup |
| 45 | static u32 next_thread_id = 1; | 45 | static u32 next_thread_id; |
| 46 | 46 | ||
| 47 | /** | 47 | /** |
| 48 | * Creates a new thread ID | 48 | * Creates a new thread ID |
| @@ -497,6 +497,12 @@ void Thread::SetWaitSynchronizationOutput(s32 output) { | |||
| 497 | void ThreadingInit() { | 497 | void ThreadingInit() { |
| 498 | ThreadWakeupEventType = CoreTiming::RegisterEvent("ThreadWakeupCallback", ThreadWakeupCallback); | 498 | ThreadWakeupEventType = CoreTiming::RegisterEvent("ThreadWakeupCallback", ThreadWakeupCallback); |
| 499 | 499 | ||
| 500 | current_thread = nullptr; | ||
| 501 | next_thread_id = 1; | ||
| 502 | |||
| 503 | thread_list.clear(); | ||
| 504 | ready_queue.clear(); | ||
| 505 | |||
| 500 | // Setup the idle thread | 506 | // Setup the idle thread |
| 501 | SetupIdleThread(); | 507 | SetupIdleThread(); |
| 502 | } | 508 | } |
diff --git a/src/core/hle/kernel/timer.cpp b/src/core/hle/kernel/timer.cpp index 1ec2a4b10..36979248d 100644 --- a/src/core/hle/kernel/timer.cpp +++ b/src/core/hle/kernel/timer.cpp | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | namespace Kernel { | 12 | namespace Kernel { |
| 13 | 13 | ||
| 14 | /// The event type of the generic timer callback event | 14 | /// The event type of the generic timer callback event |
| 15 | static int timer_callback_event_type = -1; | 15 | static int timer_callback_event_type; |
| 16 | // TODO(yuriks): This can be removed if Timer objects are explicitly pooled in the future, allowing | 16 | // TODO(yuriks): This can be removed if Timer objects are explicitly pooled in the future, allowing |
| 17 | // us to simply use a pool index or similar. | 17 | // us to simply use a pool index or similar. |
| 18 | static Kernel::HandleTable timer_callback_handle_table; | 18 | static Kernel::HandleTable timer_callback_handle_table; |
| @@ -89,6 +89,7 @@ static void TimerCallback(u64 timer_handle, int cycles_late) { | |||
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | void TimersInit() { | 91 | void TimersInit() { |
| 92 | timer_callback_handle_table.Clear(); | ||
| 92 | timer_callback_event_type = CoreTiming::RegisterEvent("TimerCallback", TimerCallback); | 93 | timer_callback_event_type = CoreTiming::RegisterEvent("TimerCallback", TimerCallback); |
| 93 | } | 94 | } |
| 94 | 95 | ||