summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/sm/sm.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2021-05-24 01:28:40 +0200
committerGitHub <noreply@github.com>2021-05-24 01:28:40 +0200
commit3ead4a34940c952f980b1214968c09f59e04947f (patch)
treeaa559314c5332dc8dfc1e2303266592abc52ed48 /src/core/hle/service/sm/sm.cpp
parentMerge pull request #6248 from A-w-x/intelmesa (diff)
parenthle: kernel: service_thread: Take reference to KServerSession on service request. (diff)
downloadyuzu-3ead4a34940c952f980b1214968c09f59e04947f.tar
yuzu-3ead4a34940c952f980b1214968c09f59e04947f.tar.gz
yuzu-3ead4a34940c952f980b1214968c09f59e04947f.tar.bz2
yuzu-3ead4a34940c952f980b1214968c09f59e04947f.tar.lz
yuzu-3ead4a34940c952f980b1214968c09f59e04947f.tar.xz
yuzu-3ead4a34940c952f980b1214968c09f59e04947f.tar.zst
yuzu-3ead4a34940c952f980b1214968c09f59e04947f.zip
Diffstat (limited to 'src/core/hle/service/sm/sm.cpp')
-rw-r--r--src/core/hle/service/sm/sm.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp
index 8cc9aee8a..a9bc7da74 100644
--- a/src/core/hle/service/sm/sm.cpp
+++ b/src/core/hle/service/sm/sm.cpp
@@ -150,31 +150,31 @@ ResultVal<Kernel::KClientSession*> SM::GetServiceImpl(Kernel::HLERequestContext&
IPC::RequestParser rp{ctx};
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.Unwrap();
- // Kernel::KScopedResourceReservation session_reservation(
- // kernel.CurrentProcess()->GetResourceLimit(), Kernel::LimitableResource::Sessions);
- // R_UNLESS(session_reservation.Succeeded(), Kernel::ResultLimitReached);
+ // 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);
+ // Create a new session.
auto* session = Kernel::KSession::Create(kernel);
session->Initialize(&port->GetClientPort(), std::move(name));
// Commit the session reservation.
- // session_reservation.Commit();
+ session_reservation.Commit();
- if (port->GetServerPort().GetHLEHandler()) {
- port->GetServerPort().GetHLEHandler()->ClientConnected(&session->GetServerSession());
- } else {
- port->EnqueueSession(&session->GetServerSession());
- }
+ // Enqueue the session with the named port.
+ port->EnqueueSession(&session->GetServerSession());
LOG_DEBUG(Service_SM, "called service={} -> session={}", name, session->GetId());
+
return MakeResult(&session->GetClientSession());
}