summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/sm/sm.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/sm/sm.cpp32
1 files changed, 12 insertions, 20 deletions
diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp
index d8b20a3f2..c7828c3bd 100644
--- a/src/core/hle/service/sm/sm.cpp
+++ b/src/core/hle/service/sm/sm.cpp
@@ -46,7 +46,7 @@ Kernel::KClientPort& ServiceManager::InterfaceFactory(ServiceManager& self, Core
self.sm_interface = sm;
self.controller_interface = std::make_unique<Controller>(system);
- return sm->CreatePort(system.Kernel());
+ return sm->CreatePort();
}
ResultVal<Kernel::KServerPort*> ServiceManager::RegisterService(std::string name,
@@ -151,31 +151,23 @@ ResultVal<Kernel::KClientSession*> SM::GetServiceImpl(Kernel::HLERequestContext&
std::string name(PopServiceName(rp));
// Find the named port.
- auto result = service_manager.GetServicePort(name);
- if (result.Failed()) {
- LOG_ERROR(Service_SM, "called service={} -> error 0x{:08X}", name, result.Code().raw);
- return result.Code();
+ auto port_result = service_manager.GetServicePort(name);
+ if (port_result.Failed()) {
+ LOG_ERROR(Service_SM, "called service={} -> error 0x{:08X}", name, port_result.Code().raw);
+ return port_result.Code();
}
- auto* port = result.Unwrap();
-
- // Reserve a new session from the process resource limit.
- Kernel::KScopedResourceReservation session_reservation(
- kernel.CurrentProcess()->GetResourceLimit(), Kernel::LimitableResource::Sessions);
- R_UNLESS(session_reservation.Succeeded(), Kernel::ResultLimitReached);
+ auto& port = port_result.Unwrap()->GetClientPort();
// Create a new session.
- auto* session = Kernel::KSession::Create(kernel);
- session->Initialize(&port->GetClientPort(), std::move(name));
-
- // Commit the session reservation.
- session_reservation.Commit();
-
- // Enqueue the session with the named port.
- port->EnqueueSession(&session->GetServerSession());
+ Kernel::KClientSession* session{};
+ if (const auto result = port.CreateSession(std::addressof(session)); result.IsError()) {
+ LOG_ERROR(Service_SM, "called service={} -> error 0x{:08X}", name, result.raw);
+ return result;
+ }
LOG_DEBUG(Service_SM, "called service={} -> session={}", name, session->GetId());
- return MakeResult(&session->GetClientSession());
+ return MakeResult(session);
}
void SM::RegisterService(Kernel::HLERequestContext& ctx) {