summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_thread.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2021-03-05 09:13:29 +0100
committerbunnei <bunneidev@gmail.com>2021-03-06 02:10:57 +0100
commit47af34003b97a27ee8456cedb367b41f8687b517 (patch)
tree5e28f986f365d7f441997c3c7e5be8f61013e72b /src/core/hle/kernel/k_thread.cpp
parentMerge pull request #6039 from yuzu-emu/revert-6006-fiber-unique-ptr (diff)
downloadyuzu-47af34003b97a27ee8456cedb367b41f8687b517.tar
yuzu-47af34003b97a27ee8456cedb367b41f8687b517.tar.gz
yuzu-47af34003b97a27ee8456cedb367b41f8687b517.tar.bz2
yuzu-47af34003b97a27ee8456cedb367b41f8687b517.tar.lz
yuzu-47af34003b97a27ee8456cedb367b41f8687b517.tar.xz
yuzu-47af34003b97a27ee8456cedb367b41f8687b517.tar.zst
yuzu-47af34003b97a27ee8456cedb367b41f8687b517.zip
Diffstat (limited to 'src/core/hle/kernel/k_thread.cpp')
-rw-r--r--src/core/hle/kernel/k_thread.cpp50
1 files changed, 31 insertions, 19 deletions
diff --git a/src/core/hle/kernel/k_thread.cpp b/src/core/hle/kernel/k_thread.cpp
index 1661afbd9..e0f53287c 100644
--- a/src/core/hle/kernel/k_thread.cpp
+++ b/src/core/hle/kernel/k_thread.cpp
@@ -995,22 +995,11 @@ std::shared_ptr<Common::Fiber>& KThread::GetHostContext() {
return host_context;
}
-ResultVal<std::shared_ptr<KThread>> KThread::Create(Core::System& system, ThreadType type_flags,
- std::string name, VAddr entry_point,
- u32 priority, u64 arg, s32 processor_id,
- VAddr stack_top, Process* owner_process) {
- std::function<void(void*)> init_func = Core::CpuManager::GetGuestThreadStartFunc();
- void* init_func_parameter = system.GetCpuManager().GetStartFuncParamater();
- return Create(system, type_flags, name, entry_point, priority, arg, processor_id, stack_top,
- owner_process, std::move(init_func), init_func_parameter);
-}
-
-ResultVal<std::shared_ptr<KThread>> KThread::Create(Core::System& system, ThreadType type_flags,
- std::string name, VAddr entry_point,
- u32 priority, u64 arg, s32 processor_id,
- VAddr stack_top, Process* owner_process,
- std::function<void(void*)>&& thread_start_func,
- void* thread_start_parameter) {
+ResultVal<std::shared_ptr<KThread>> KThread::CreateThread(Core::System& system,
+ ThreadType type_flags, std::string name,
+ VAddr entry_point, u32 priority, u64 arg,
+ s32 processor_id, VAddr stack_top,
+ Process* owner_process) {
auto& kernel = system.Kernel();
std::shared_ptr<KThread> thread = std::make_shared<KThread>(kernel);
@@ -1027,12 +1016,35 @@ ResultVal<std::shared_ptr<KThread>> KThread::Create(Core::System& system, Thread
auto& scheduler = kernel.GlobalSchedulerContext();
scheduler.AddThread(thread);
- thread->host_context =
- std::make_shared<Common::Fiber>(std::move(thread_start_func), thread_start_parameter);
-
return MakeResult<std::shared_ptr<KThread>>(std::move(thread));
}
+ResultVal<std::shared_ptr<KThread>> KThread::CreateThread(
+ Core::System& system, ThreadType type_flags, std::string name, VAddr entry_point, u32 priority,
+ u64 arg, s32 processor_id, VAddr stack_top, Process* owner_process,
+ std::function<void(void*)>&& thread_start_func, void* thread_start_parameter) {
+ auto thread_result = CreateThread(system, type_flags, name, entry_point, priority, arg,
+ processor_id, stack_top, owner_process);
+
+ if (thread_result.Succeeded()) {
+ (*thread_result)->host_context =
+ std::make_shared<Common::Fiber>(std::move(thread_start_func), thread_start_parameter);
+ }
+
+ return thread_result;
+}
+
+ResultVal<std::shared_ptr<KThread>> KThread::CreateUserThread(
+ Core::System& system, ThreadType type_flags, std::string name, VAddr entry_point, u32 priority,
+ u64 arg, s32 processor_id, VAddr stack_top, Process* owner_process) {
+ std::function<void(void*)> init_func = Core::CpuManager::GetGuestThreadStartFunc();
+
+ void* init_func_parameter = system.GetCpuManager().GetStartFuncParamater();
+
+ return CreateThread(system, type_flags, name, entry_point, priority, arg, processor_id,
+ stack_top, owner_process, std::move(init_func), init_func_parameter);
+}
+
KThread* GetCurrentThreadPointer(KernelCore& kernel) {
return kernel.GetCurrentEmuThread();
}