aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel')
-rw-r--r--src/core/hle/kernel/kernel.cpp25
-rw-r--r--src/core/hle/kernel/kernel.h7
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();