From 34f1fe088cca4621422757dbc9828f86bd83b234 Mon Sep 17 00:00:00 2001 From: Weiyi Wang Date: Tue, 23 Oct 2018 09:57:59 -0400 Subject: [PATCH] kernel/thread: add ThreadManager --- src/core/hle/kernel/kernel.cpp | 9 +++++++++ src/core/hle/kernel/kernel.h | 6 ++++++ src/core/hle/kernel/thread.cpp | 4 +++- src/core/hle/kernel/thread.h | 6 ++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index afe6af195..0811fa699 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -21,6 +21,7 @@ KernelSystem::KernelSystem(u32 system_mode) { Kernel::MemoryInit(system_mode); resource_limits = std::make_unique(*this); + thread_manager = std::make_unique(); Kernel::ThreadingInit(); Kernel::TimersInit(); } @@ -53,4 +54,12 @@ void KernelSystem::SetCurrentProcess(SharedPtr process) { current_process = std::move(process); } +ThreadManager& KernelSystem::GetThreadManager() { + return *thread_manager; +} + +const ThreadManager& KernelSystem::GetThreadManager() const { + return *thread_manager; +} + } // namespace Kernel diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index 344635c6a..83f622670 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h @@ -28,6 +28,7 @@ class ClientSession; class ServerSession; class ResourceLimitList; class SharedMemory; +class ThreadManager; enum class ResetType { OneShot, @@ -187,6 +188,9 @@ public: SharedPtr GetCurrentProcess() const; void SetCurrentProcess(SharedPtr process); + ThreadManager& GetThreadManager(); + const ThreadManager& GetThreadManager() const; + private: std::unique_ptr resource_limits; std::atomic next_object_id{0}; @@ -199,6 +203,8 @@ private: std::vector> process_list; SharedPtr current_process; + + std::unique_ptr thread_manager; }; } // namespace Kernel diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index a7b6eba1e..1c835f601 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -59,7 +59,9 @@ inline static u32 const NewThreadId() { return next_thread_id++; } -Thread::Thread(KernelSystem& kernel) : WaitObject(kernel), context(Core::CPU().NewContext()) {} +Thread::Thread(KernelSystem& kernel) + : WaitObject(kernel), context(Core::CPU().NewContext()), + thread_manager(kernel.GetThreadManager()) {} Thread::~Thread() {} Thread* GetCurrentThread() { diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index 9c7dd45cc..6c9df27ff 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -53,6 +53,10 @@ enum class ThreadWakeupReason { Timeout // The thread was woken up due to a wait timeout. }; +class ThreadManager { +public: +}; + class Thread final : public WaitObject { public: std::string GetName() const override { @@ -210,6 +214,8 @@ private: explicit Thread(KernelSystem&); ~Thread() override; + ThreadManager& thread_manager; + friend class KernelSystem; };