aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/service/kernel_helpers.cpp
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2023-02-18 16:26:48 -0500
committerLiam <byteslice@airmail.cc>2023-02-21 12:19:25 -0500
commita9369726147c7499e0016e183d5d56a7b44efe4b (patch)
treec1d1b4a9fdafd92863c0922b05d72c14de83ffa7 /src/core/hle/service/kernel_helpers.cpp
parent23151ff498993badb341ddf6de5ed38a5833e41c (diff)
service: refactor server architecture
Converts services to have their own processes
Diffstat (limited to 'src/core/hle/service/kernel_helpers.cpp')
-rw-r--r--src/core/hle/service/kernel_helpers.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/core/hle/service/kernel_helpers.cpp b/src/core/hle/service/kernel_helpers.cpp
index 42991928e..a39ce5212 100644
--- a/src/core/hle/service/kernel_helpers.cpp
+++ b/src/core/hle/service/kernel_helpers.cpp
@@ -15,17 +15,24 @@ namespace Service::KernelHelpers {
ServiceContext::ServiceContext(Core::System& system_, std::string name_)
: kernel(system_.Kernel()) {
+ if (process = Kernel::GetCurrentProcessPointer(kernel); process != nullptr) {
+ return;
+ }
+
// Create the process.
process = Kernel::KProcess::Create(kernel);
ASSERT(Kernel::KProcess::Initialize(process, system_, std::move(name_),
Kernel::KProcess::ProcessType::KernelInternal,
kernel.GetSystemResourceLimit())
.IsSuccess());
+ process_created = true;
}
ServiceContext::~ServiceContext() {
- process->Close();
- process = nullptr;
+ if (process_created) {
+ process->Close();
+ process = nullptr;
+ }
}
Kernel::KEvent* ServiceContext::CreateEvent(std::string&& name) {