diff options
Diffstat (limited to 'src/core/hle/kernel')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 25 | ||||
| -rw-r--r-- | src/core/hle/kernel/kernel.h | 7 |
2 files changed, 26 insertions, 6 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index d25ac37df4..a739e7020c 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -349,9 +349,18 @@ struct KernelCore::Impl { object_name_global_data.emplace(kernel); } - void MakeApplicationProcess(KernelCore& kernel, KProcess* process) { + void SetApplicationProcess(KernelCore& kernel, KProcess* process) { + if (application_process == process) + return; + + KProcess* const previous = application_process; application_process = process; - application_process->Open(kernel); + + if (application_process != nullptr) + application_process->Open(kernel); + + if (previous != nullptr) + previous->Close(kernel); } /// Sets the host thread ID for the caller. @@ -879,8 +888,8 @@ void KernelCore::RemoveProcess(KProcess* process) { } } -void KernelCore::MakeApplicationProcess(KProcess* process) { - impl->MakeApplicationProcess(*this, process); +void KernelCore::SetApplicationProcess(KProcess* process) { + impl->SetApplicationProcess(*this, process); } KProcess* KernelCore::ApplicationProcess() { @@ -891,6 +900,14 @@ const KProcess* KernelCore::ApplicationProcess() const { return impl->application_process; } +KScopedAutoObject<KProcess> KernelCore::GetProcessByProcessId(u64 process_id) { + std::scoped_lock lk{impl->process_list_lock}; + for (auto* const process : impl->process_list) + if (process != nullptr && process->GetProcessId() == process_id) + return {*this, process}; + return {*this, nullptr}; +} + std::list<KScopedAutoObject<KProcess>> KernelCore::GetProcessList() { std::list<KScopedAutoObject<KProcess>> processes; std::scoped_lock lk{impl->process_list_lock}; diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index 3b754e9397..04790c8b38 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h @@ -124,8 +124,8 @@ public: void AppendNewProcess(KProcess* process); void RemoveProcess(KProcess* process); - /// Makes the given process the new application process. - void MakeApplicationProcess(KProcess* process); + /// Makes the given process the current application process. + void SetApplicationProcess(KProcess* process); /// Retrieves a pointer to the application process. KProcess* ApplicationProcess(); @@ -133,6 +133,9 @@ public: /// Retrieves a const pointer to the application process. const KProcess* ApplicationProcess() const; + /// Retrieves the process with the given process ID, or a null object. + KScopedAutoObject<KProcess> GetProcessByProcessId(u64 process_id); + /// Retrieves the list of processes. std::list<KScopedAutoObject<KProcess>> GetProcessList(); |
