summaryrefslogtreecommitdiff
path: root/src/core/hle/service/service.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2021-05-10 15:57:59 -0700
committerGravatar bunnei2021-05-10 20:34:38 -0700
commitc6de9657be71a9c659f9c991ec8d024ebf44d56e (patch)
tree8e5e3087a136fdcc218d789ae6f6457e83554919 /src/core/hle/service/service.cpp
parenthle: kernel: KSession: Improve implementation of CloneCurrentObject. (diff)
downloadyuzu-c6de9657be71a9c659f9c991ec8d024ebf44d56e.tar.gz
yuzu-c6de9657be71a9c659f9c991ec8d024ebf44d56e.tar.xz
yuzu-c6de9657be71a9c659f9c991ec8d024ebf44d56e.zip
hle: kernel: Implement named service ports using service interface factory.
- This allows us to create a new interface each time ConnectToNamedPort is called, removing the assumption that these are static.
Diffstat (limited to 'src/core/hle/service/service.cpp')
-rw-r--r--src/core/hle/service/service.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index 00e683c2f..f3fd0f534 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -111,7 +111,7 @@ void ServiceFrameworkBase::InstallAsService(SM::ServiceManager& service_manager)
111 port_installed = true; 111 port_installed = true;
112} 112}
113 113
114void ServiceFrameworkBase::InstallAsNamedPort(Kernel::KernelCore& kernel) { 114Kernel::KClientPort& ServiceFrameworkBase::CreatePort(Kernel::KernelCore& kernel) {
115 const auto guard = LockService(); 115 const auto guard = LockService();
116 116
117 ASSERT(!port_installed); 117 ASSERT(!port_installed);
@@ -119,9 +119,10 @@ void ServiceFrameworkBase::InstallAsNamedPort(Kernel::KernelCore& kernel) {
119 auto* port = Kernel::KPort::Create(kernel); 119 auto* port = Kernel::KPort::Create(kernel);
120 port->Initialize(max_sessions, false, service_name); 120 port->Initialize(max_sessions, false, service_name);
121 port->GetServerPort().SetHleHandler(shared_from_this()); 121 port->GetServerPort().SetHleHandler(shared_from_this());
122 kernel.AddNamedPort(service_name, &port->GetClientPort());
123 122
124 port_installed = true; 123 port_installed = true;
124
125 return port->GetClientPort();
125} 126}
126 127
127void ServiceFrameworkBase::RegisterHandlersBase(const FunctionInfoBase* functions, std::size_t n) { 128void ServiceFrameworkBase::RegisterHandlersBase(const FunctionInfoBase* functions, std::size_t n) {