@ -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 ( ) ;
}