summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/CMakeLists.txt4
-rw-r--r--src/core/core.cpp2
-rw-r--r--src/core/hle/ipc_helpers.h2
-rw-r--r--src/core/hle/kernel/k_client_port.cpp (renamed from src/core/hle/kernel/client_port.cpp)31
-rw-r--r--src/core/hle/kernel/k_client_port.h (renamed from src/core/hle/kernel/client_port.h)45
-rw-r--r--src/core/hle/kernel/k_server_session.cpp2
-rw-r--r--src/core/hle/kernel/k_session.h4
-rw-r--r--src/core/hle/kernel/kernel.cpp10
-rw-r--r--src/core/hle/kernel/kernel.h6
-rw-r--r--src/core/hle/kernel/server_port.cpp15
-rw-r--r--src/core/hle/kernel/server_port.h4
-rw-r--r--src/core/hle/kernel/svc.cpp2
-rw-r--r--src/core/hle/service/hid/hid.cpp2
-rw-r--r--src/core/hle/service/service.cpp4
-rw-r--r--src/core/hle/service/set/set_sys.cpp2
-rw-r--r--src/core/hle/service/sm/sm.cpp10
-rw-r--r--src/core/hle/service/sm/sm.h8
-rw-r--r--src/core/hle/service/time/time.cpp2
18 files changed, 92 insertions, 63 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 8e3b51ae7..cab1f5ae2 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -144,8 +144,6 @@ add_library(core STATIC
144 hle/kernel/board/nintendo/nx/k_system_control.cpp 144 hle/kernel/board/nintendo/nx/k_system_control.cpp
145 hle/kernel/board/nintendo/nx/k_system_control.h 145 hle/kernel/board/nintendo/nx/k_system_control.h
146 hle/kernel/board/nintendo/nx/secure_monitor.h 146 hle/kernel/board/nintendo/nx/secure_monitor.h
147 hle/kernel/client_port.cpp
148 hle/kernel/client_port.h
149 hle/kernel/code_set.cpp 147 hle/kernel/code_set.cpp
150 hle/kernel/code_set.h 148 hle/kernel/code_set.h
151 hle/kernel/svc_results.h 149 hle/kernel/svc_results.h
@@ -168,6 +166,8 @@ add_library(core STATIC
168 hle/kernel/k_affinity_mask.h 166 hle/kernel/k_affinity_mask.h
169 hle/kernel/k_class_token.cpp 167 hle/kernel/k_class_token.cpp
170 hle/kernel/k_class_token.h 168 hle/kernel/k_class_token.h
169 hle/kernel/k_client_port.cpp
170 hle/kernel/k_client_port.h
171 hle/kernel/k_client_session.cpp 171 hle/kernel/k_client_session.cpp
172 hle/kernel/k_client_session.h 172 hle/kernel/k_client_session.h
173 hle/kernel/k_condition_variable.cpp 173 hle/kernel/k_condition_variable.cpp
diff --git a/src/core/core.cpp b/src/core/core.cpp
index b5bc903cd..4bb96d77d 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -27,7 +27,7 @@
27#include "core/file_sys/vfs_concat.h" 27#include "core/file_sys/vfs_concat.h"
28#include "core/file_sys/vfs_real.h" 28#include "core/file_sys/vfs_real.h"
29#include "core/hardware_interrupt_manager.h" 29#include "core/hardware_interrupt_manager.h"
30#include "core/hle/kernel/client_port.h" 30#include "core/hle/kernel/k_client_port.h"
31#include "core/hle/kernel/k_scheduler.h" 31#include "core/hle/kernel/k_scheduler.h"
32#include "core/hle/kernel/k_thread.h" 32#include "core/hle/kernel/k_thread.h"
33#include "core/hle/kernel/kernel.h" 33#include "core/hle/kernel/kernel.h"
diff --git a/src/core/hle/ipc_helpers.h b/src/core/hle/ipc_helpers.h
index 99b7d3d82..18aebf6ea 100644
--- a/src/core/hle/ipc_helpers.h
+++ b/src/core/hle/ipc_helpers.h
@@ -13,8 +13,8 @@
13#include "common/assert.h" 13#include "common/assert.h"
14#include "common/common_types.h" 14#include "common/common_types.h"
15#include "core/hle/ipc.h" 15#include "core/hle/ipc.h"
16#include "core/hle/kernel/client_port.h"
17#include "core/hle/kernel/hle_ipc.h" 16#include "core/hle/kernel/hle_ipc.h"
17#include "core/hle/kernel/k_client_port.h"
18#include "core/hle/kernel/k_session.h" 18#include "core/hle/kernel/k_session.h"
19#include "core/hle/kernel/object.h" 19#include "core/hle/kernel/object.h"
20#include "core/hle/result.h" 20#include "core/hle/result.h"
diff --git a/src/core/hle/kernel/client_port.cpp b/src/core/hle/kernel/k_client_port.cpp
index ce88da1c3..15bf0d4fc 100644
--- a/src/core/hle/kernel/client_port.cpp
+++ b/src/core/hle/kernel/k_client_port.cpp
@@ -2,8 +2,8 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include "core/hle/kernel/client_port.h"
6#include "core/hle/kernel/hle_ipc.h" 5#include "core/hle/kernel/hle_ipc.h"
6#include "core/hle/kernel/k_client_port.h"
7#include "core/hle/kernel/k_session.h" 7#include "core/hle/kernel/k_session.h"
8#include "core/hle/kernel/object.h" 8#include "core/hle/kernel/object.h"
9#include "core/hle/kernel/server_port.h" 9#include "core/hle/kernel/server_port.h"
@@ -11,18 +11,23 @@
11 11
12namespace Kernel { 12namespace Kernel {
13 13
14ClientPort::ClientPort(KernelCore& kernel) : Object{kernel} {} 14KClientPort::KClientPort(KernelCore& kernel) : KSynchronizationObject{kernel} {}
15ClientPort::~ClientPort() = default; 15KClientPort::~KClientPort() = default;
16 16
17std::shared_ptr<ServerPort> ClientPort::GetServerPort() const { 17void KClientPort::Initialize(s32 max_sessions_, std::string&& name_) {
18 max_sessions = max_sessions_;
19 name = std::move(name_);
20}
21
22std::shared_ptr<ServerPort> KClientPort::GetServerPort() const {
18 return server_port; 23 return server_port;
19} 24}
20 25
21ResultVal<KClientSession*> ClientPort::Connect() { 26ResultVal<KClientSession*> KClientPort::Connect() {
22 if (active_sessions >= max_sessions) { 27 if (num_sessions >= max_sessions) {
23 return ResultOutOfSessions; 28 return ResultOutOfSessions;
24 } 29 }
25 active_sessions++; 30 num_sessions++;
26 31
27 auto* session = Kernel::KSession::Create(kernel); 32 auto* session = Kernel::KSession::Create(kernel);
28 session->Initialize(name + ":ClientPort"); 33 session->Initialize(name + ":ClientPort");
@@ -36,12 +41,18 @@ ResultVal<KClientSession*> ClientPort::Connect() {
36 return MakeResult(std::addressof(session->GetClientSession())); 41 return MakeResult(std::addressof(session->GetClientSession()));
37} 42}
38 43
39void ClientPort::ConnectionClosed() { 44void KClientPort::ConnectionClosed() {
40 if (active_sessions == 0) { 45 if (num_sessions == 0) {
41 return; 46 return;
42 } 47 }
43 48
44 --active_sessions; 49 --num_sessions;
50}
51
52void KClientPort::Destroy() {}
53
54bool KClientPort::IsSignaled() const {
55 return num_sessions < max_sessions;
45} 56}
46 57
47} // namespace Kernel 58} // namespace Kernel
diff --git a/src/core/hle/kernel/client_port.h b/src/core/hle/kernel/k_client_port.h
index 0b20fef40..04ee2d664 100644
--- a/src/core/hle/kernel/client_port.h
+++ b/src/core/hle/kernel/k_client_port.h
@@ -8,7 +8,7 @@
8#include <string> 8#include <string>
9 9
10#include "common/common_types.h" 10#include "common/common_types.h"
11#include "core/hle/kernel/object.h" 11#include "core/hle/kernel/k_synchronization_object.h"
12#include "core/hle/result.h" 12#include "core/hle/result.h"
13 13
14namespace Kernel { 14namespace Kernel {
@@ -17,23 +17,16 @@ class KClientSession;
17class KernelCore; 17class KernelCore;
18class ServerPort; 18class ServerPort;
19 19
20class ClientPort final : public Object { 20class KClientPort final : public KSynchronizationObject {
21 KERNEL_AUTOOBJECT_TRAITS(KClientPort, KSynchronizationObject);
22
21public: 23public:
22 explicit ClientPort(KernelCore& kernel); 24 explicit KClientPort(KernelCore& kernel);
23 ~ClientPort() override; 25 virtual ~KClientPort() override;
24 26
25 friend class ServerPort; 27 friend class ServerPort;
26 std::string GetTypeName() const override {
27 return "ClientPort";
28 }
29 std::string GetName() const override {
30 return name;
31 }
32 28
33 static constexpr HandleType HANDLE_TYPE = HandleType::ClientPort; 29 void Initialize(s32 max_sessions_, std::string&& name_);
34 HandleType GetHandleType() const override {
35 return HANDLE_TYPE;
36 }
37 30
38 std::shared_ptr<ServerPort> GetServerPort() const; 31 std::shared_ptr<ServerPort> GetServerPort() const;
39 32
@@ -51,13 +44,29 @@ public:
51 */ 44 */
52 void ConnectionClosed(); 45 void ConnectionClosed();
53 46
54 void Finalize() override {} 47 // Overridden virtual functions.
48 virtual void Destroy() override;
49 virtual bool IsSignaled() const override;
50
51 // DEPRECATED
52
53 std::string GetTypeName() const override {
54 return "ClientPort";
55 }
56 std::string GetName() const override {
57 return name;
58 }
59
60 static constexpr HandleType HANDLE_TYPE = HandleType::ClientPort;
61 HandleType GetHandleType() const override {
62 return HANDLE_TYPE;
63 }
55 64
56private: 65private:
57 std::shared_ptr<ServerPort> server_port; ///< ServerPort associated with this client port. 66 std::shared_ptr<ServerPort> server_port; ///< ServerPort associated with this client port.
58 u32 max_sessions = 0; ///< Maximum number of simultaneous sessions the port can have 67 s32 max_sessions = 0; ///< Maximum number of simultaneous sessions the port can have
59 u32 active_sessions = 0; ///< Number of currently open sessions to this port 68 std::atomic<s32> num_sessions = 0; ///< Number of currently open sessions to this port
60 std::string name; ///< Name of client port (optional) 69 std::string name; ///< Name of client port (optional)
61}; 70};
62 71
63} // namespace Kernel 72} // namespace Kernel
diff --git a/src/core/hle/kernel/k_server_session.cpp b/src/core/hle/kernel/k_server_session.cpp
index 8cd2c283c..46ba7081b 100644
--- a/src/core/hle/kernel/k_server_session.cpp
+++ b/src/core/hle/kernel/k_server_session.cpp
@@ -10,9 +10,9 @@
10#include "common/logging/log.h" 10#include "common/logging/log.h"
11#include "core/core_timing.h" 11#include "core/core_timing.h"
12#include "core/hle/ipc_helpers.h" 12#include "core/hle/ipc_helpers.h"
13#include "core/hle/kernel/client_port.h"
14#include "core/hle/kernel/handle_table.h" 13#include "core/hle/kernel/handle_table.h"
15#include "core/hle/kernel/hle_ipc.h" 14#include "core/hle/kernel/hle_ipc.h"
15#include "core/hle/kernel/k_client_port.h"
16#include "core/hle/kernel/k_scheduler.h" 16#include "core/hle/kernel/k_scheduler.h"
17#include "core/hle/kernel/k_server_session.h" 17#include "core/hle/kernel/k_server_session.h"
18#include "core/hle/kernel/k_session.h" 18#include "core/hle/kernel/k_session.h"
diff --git a/src/core/hle/kernel/k_session.h b/src/core/hle/kernel/k_session.h
index 1d24e80cd..6a6fcb588 100644
--- a/src/core/hle/kernel/k_session.h
+++ b/src/core/hle/kernel/k_session.h
@@ -70,7 +70,7 @@ public:
70 return server; 70 return server;
71 } 71 }
72 72
73 const ClientPort* GetParent() const { 73 const KClientPort* GetParent() const {
74 return port; 74 return port;
75 } 75 }
76 76
@@ -99,7 +99,7 @@ private:
99 KClientSession client; 99 KClientSession client;
100 std::atomic<std::underlying_type<State>::type> atomic_state{ 100 std::atomic<std::underlying_type<State>::type> atomic_state{
101 static_cast<std::underlying_type<State>::type>(State::Invalid)}; 101 static_cast<std::underlying_type<State>::type>(State::Invalid)};
102 ClientPort* port{}; 102 KClientPort* port{};
103 std::string name; 103 std::string name;
104 Process* process{}; 104 Process* process{};
105 bool initialized{}; 105 bool initialized{};
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index ada993f46..c939bb903 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -26,9 +26,9 @@
26#include "core/cpu_manager.h" 26#include "core/cpu_manager.h"
27#include "core/device_memory.h" 27#include "core/device_memory.h"
28#include "core/hardware_properties.h" 28#include "core/hardware_properties.h"
29#include "core/hle/kernel/client_port.h"
30#include "core/hle/kernel/handle_table.h" 29#include "core/hle/kernel/handle_table.h"
31#include "core/hle/kernel/init/init_slab_setup.h" 30#include "core/hle/kernel/init/init_slab_setup.h"
31#include "core/hle/kernel/k_client_port.h"
32#include "core/hle/kernel/k_memory_layout.h" 32#include "core/hle/kernel/k_memory_layout.h"
33#include "core/hle/kernel/k_memory_manager.h" 33#include "core/hle/kernel/k_memory_manager.h"
34#include "core/hle/kernel/k_resource_limit.h" 34#include "core/hle/kernel/k_resource_limit.h"
@@ -122,6 +122,9 @@ struct KernelCore::Impl {
122 122
123 preemption_event = nullptr; 123 preemption_event = nullptr;
124 124
125 for (auto& iter : named_ports) {
126 iter.second->Close();
127 }
125 named_ports.clear(); 128 named_ports.clear();
126 129
127 exclusive_monitor.reset(); 130 exclusive_monitor.reset();
@@ -843,8 +846,9 @@ void KernelCore::PrepareReschedule(std::size_t id) {
843 // TODO: Reimplement, this 846 // TODO: Reimplement, this
844} 847}
845 848
846void KernelCore::AddNamedPort(std::string name, std::shared_ptr<ClientPort> port) { 849void KernelCore::AddNamedPort(std::string name, KClientPort* port) {
847 impl->named_ports.emplace(std::move(name), std::move(port)); 850 port->Open();
851 impl->named_ports.emplace(std::move(name), port);
848} 852}
849 853
850KernelCore::NamedPortTable::iterator KernelCore::FindNamedPort(const std::string& name) { 854KernelCore::NamedPortTable::iterator KernelCore::FindNamedPort(const std::string& name) {
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index 43e49603b..19b3530b4 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -29,7 +29,7 @@ struct EventType;
29 29
30namespace Kernel { 30namespace Kernel {
31 31
32class ClientPort; 32class KClientPort;
33class GlobalSchedulerContext; 33class GlobalSchedulerContext;
34class HandleTable; 34class HandleTable;
35class KAutoObjectWithListContainer; 35class KAutoObjectWithListContainer;
@@ -60,7 +60,7 @@ constexpr EmuThreadHandle EmuThreadHandleReserved{1ULL << 63};
60/// Represents a single instance of the kernel. 60/// Represents a single instance of the kernel.
61class KernelCore { 61class KernelCore {
62private: 62private:
63 using NamedPortTable = std::unordered_map<std::string, std::shared_ptr<ClientPort>>; 63 using NamedPortTable = std::unordered_map<std::string, KClientPort*>;
64 64
65public: 65public:
66 /// Constructs an instance of the kernel using the given System 66 /// Constructs an instance of the kernel using the given System
@@ -168,7 +168,7 @@ public:
168 void InvalidateCpuInstructionCacheRange(VAddr addr, std::size_t size); 168 void InvalidateCpuInstructionCacheRange(VAddr addr, std::size_t size);
169 169
170 /// Adds a port to the named port table 170 /// Adds a port to the named port table
171 void AddNamedPort(std::string name, std::shared_ptr<ClientPort> port); 171 void AddNamedPort(std::string name, KClientPort* port);
172 172
173 /// Finds a port within the named port table with the given name. 173 /// Finds a port within the named port table with the given name.
174 NamedPortTable::iterator FindNamedPort(const std::string& name); 174 NamedPortTable::iterator FindNamedPort(const std::string& name);
diff --git a/src/core/hle/kernel/server_port.cpp b/src/core/hle/kernel/server_port.cpp
index 8626b56fd..addaaa5cf 100644
--- a/src/core/hle/kernel/server_port.cpp
+++ b/src/core/hle/kernel/server_port.cpp
@@ -4,7 +4,7 @@
4 4
5#include <tuple> 5#include <tuple>
6#include "common/assert.h" 6#include "common/assert.h"
7#include "core/hle/kernel/client_port.h" 7#include "core/hle/kernel/k_client_port.h"
8#include "core/hle/kernel/k_server_session.h" 8#include "core/hle/kernel/k_server_session.h"
9#include "core/hle/kernel/k_thread.h" 9#include "core/hle/kernel/k_thread.h"
10#include "core/hle/kernel/object.h" 10#include "core/hle/kernel/object.h"
@@ -40,15 +40,16 @@ bool ServerPort::IsSignaled() const {
40ServerPort::PortPair ServerPort::CreatePortPair(KernelCore& kernel, u32 max_sessions, 40ServerPort::PortPair ServerPort::CreatePortPair(KernelCore& kernel, u32 max_sessions,
41 std::string name) { 41 std::string name) {
42 std::shared_ptr<ServerPort> server_port = std::make_shared<ServerPort>(kernel); 42 std::shared_ptr<ServerPort> server_port = std::make_shared<ServerPort>(kernel);
43 std::shared_ptr<ClientPort> client_port = std::make_shared<ClientPort>(kernel); 43 KClientPort* client_port = new KClientPort(kernel);
44 44
45 server_port->name = name + "_Server"; 45 KAutoObject::Create(client_port);
46 client_port->name = name + "_Client"; 46
47 client_port->Initialize(max_sessions, name + "_Client");
47 client_port->server_port = server_port; 48 client_port->server_port = server_port;
48 client_port->max_sessions = max_sessions;
49 client_port->active_sessions = 0;
50 49
51 return std::make_pair(std::move(server_port), std::move(client_port)); 50 server_port->name = name + "_Server";
51
52 return std::make_pair(std::move(server_port), client_port);
52} 53}
53 54
54} // namespace Kernel 55} // namespace Kernel
diff --git a/src/core/hle/kernel/server_port.h b/src/core/hle/kernel/server_port.h
index eebceaa2a..f7d443df8 100644
--- a/src/core/hle/kernel/server_port.h
+++ b/src/core/hle/kernel/server_port.h
@@ -15,7 +15,7 @@
15 15
16namespace Kernel { 16namespace Kernel {
17 17
18class ClientPort; 18class KClientPort;
19class KernelCore; 19class KernelCore;
20class KServerSession; 20class KServerSession;
21class SessionRequestHandler; 21class SessionRequestHandler;
@@ -26,7 +26,7 @@ public:
26 ~ServerPort() override; 26 ~ServerPort() override;
27 27
28 using HLEHandler = std::shared_ptr<SessionRequestHandler>; 28 using HLEHandler = std::shared_ptr<SessionRequestHandler>;
29 using PortPair = std::pair<std::shared_ptr<ServerPort>, std::shared_ptr<ClientPort>>; 29 using PortPair = std::pair<std::shared_ptr<ServerPort>, KClientPort*>;
30 30
31 /** 31 /**
32 * Creates a pair of ServerPort and an associated ClientPort. 32 * Creates a pair of ServerPort and an associated ClientPort.
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index fa85bd631..8d8d3dd5a 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -21,9 +21,9 @@
21#include "core/core_timing.h" 21#include "core/core_timing.h"
22#include "core/core_timing_util.h" 22#include "core/core_timing_util.h"
23#include "core/cpu_manager.h" 23#include "core/cpu_manager.h"
24#include "core/hle/kernel/client_port.h"
25#include "core/hle/kernel/handle_table.h" 24#include "core/hle/kernel/handle_table.h"
26#include "core/hle/kernel/k_address_arbiter.h" 25#include "core/hle/kernel/k_address_arbiter.h"
26#include "core/hle/kernel/k_client_port.h"
27#include "core/hle/kernel/k_client_session.h" 27#include "core/hle/kernel/k_client_session.h"
28#include "core/hle/kernel/k_condition_variable.h" 28#include "core/hle/kernel/k_condition_variable.h"
29#include "core/hle/kernel/k_event.h" 29#include "core/hle/kernel/k_event.h"
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index d831aa214..49c17fd14 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -13,7 +13,7 @@
13#include "core/frontend/input.h" 13#include "core/frontend/input.h"
14#include "core/hardware_properties.h" 14#include "core/hardware_properties.h"
15#include "core/hle/ipc_helpers.h" 15#include "core/hle/ipc_helpers.h"
16#include "core/hle/kernel/client_port.h" 16#include "core/hle/kernel/k_client_port.h"
17#include "core/hle/kernel/k_readable_event.h" 17#include "core/hle/kernel/k_readable_event.h"
18#include "core/hle/kernel/k_shared_memory.h" 18#include "core/hle/kernel/k_shared_memory.h"
19#include "core/hle/kernel/k_transfer_memory.h" 19#include "core/hle/kernel/k_transfer_memory.h"
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index 41a502d8d..d8ad09b49 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -11,7 +11,7 @@
11#include "core/core.h" 11#include "core/core.h"
12#include "core/hle/ipc.h" 12#include "core/hle/ipc.h"
13#include "core/hle/ipc_helpers.h" 13#include "core/hle/ipc_helpers.h"
14#include "core/hle/kernel/client_port.h" 14#include "core/hle/kernel/k_client_port.h"
15#include "core/hle/kernel/k_thread.h" 15#include "core/hle/kernel/k_thread.h"
16#include "core/hle/kernel/kernel.h" 16#include "core/hle/kernel/kernel.h"
17#include "core/hle/kernel/process.h" 17#include "core/hle/kernel/process.h"
@@ -119,7 +119,7 @@ void ServiceFrameworkBase::InstallAsNamedPort(Kernel::KernelCore& kernel) {
119 auto [server_port, client_port] = 119 auto [server_port, client_port] =
120 Kernel::ServerPort::CreatePortPair(kernel, max_sessions, service_name); 120 Kernel::ServerPort::CreatePortPair(kernel, max_sessions, service_name);
121 server_port->SetHleHandler(shared_from_this()); 121 server_port->SetHleHandler(shared_from_this());
122 kernel.AddNamedPort(service_name, std::move(client_port)); 122 kernel.AddNamedPort(service_name, client_port);
123 port_installed = true; 123 port_installed = true;
124} 124}
125 125
diff --git a/src/core/hle/service/set/set_sys.cpp b/src/core/hle/service/set/set_sys.cpp
index 5909fdd85..4f1ffe55f 100644
--- a/src/core/hle/service/set/set_sys.cpp
+++ b/src/core/hle/service/set/set_sys.cpp
@@ -7,7 +7,7 @@
7#include "core/file_sys/errors.h" 7#include "core/file_sys/errors.h"
8#include "core/file_sys/system_archive/system_version.h" 8#include "core/file_sys/system_archive/system_version.h"
9#include "core/hle/ipc_helpers.h" 9#include "core/hle/ipc_helpers.h"
10#include "core/hle/kernel/client_port.h" 10#include "core/hle/kernel/k_client_port.h"
11#include "core/hle/service/filesystem/filesystem.h" 11#include "core/hle/service/filesystem/filesystem.h"
12#include "core/hle/service/set/set_sys.h" 12#include "core/hle/service/set/set_sys.h"
13 13
diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp
index 66e41277f..39575ce3d 100644
--- a/src/core/hle/service/sm/sm.cpp
+++ b/src/core/hle/service/sm/sm.cpp
@@ -6,7 +6,7 @@
6#include "common/assert.h" 6#include "common/assert.h"
7#include "core/core.h" 7#include "core/core.h"
8#include "core/hle/ipc_helpers.h" 8#include "core/hle/ipc_helpers.h"
9#include "core/hle/kernel/client_port.h" 9#include "core/hle/kernel/k_client_port.h"
10#include "core/hle/kernel/k_client_session.h" 10#include "core/hle/kernel/k_client_session.h"
11#include "core/hle/kernel/k_server_session.h" 11#include "core/hle/kernel/k_server_session.h"
12#include "core/hle/kernel/k_session.h" 12#include "core/hle/kernel/k_session.h"
@@ -62,6 +62,8 @@ ResultVal<std::shared_ptr<Kernel::ServerPort>> ServiceManager::RegisterService(s
62 auto [server_port, client_port] = 62 auto [server_port, client_port] =
63 Kernel::ServerPort::CreatePortPair(kernel, max_sessions, name); 63 Kernel::ServerPort::CreatePortPair(kernel, max_sessions, name);
64 64
65 client_port->Open();
66
65 registered_services.emplace(std::move(name), std::move(client_port)); 67 registered_services.emplace(std::move(name), std::move(client_port));
66 return MakeResult(std::move(server_port)); 68 return MakeResult(std::move(server_port));
67} 69}
@@ -74,12 +76,14 @@ ResultCode ServiceManager::UnregisterService(const std::string& name) {
74 LOG_ERROR(Service_SM, "Server is not registered! service={}", name); 76 LOG_ERROR(Service_SM, "Server is not registered! service={}", name);
75 return ERR_SERVICE_NOT_REGISTERED; 77 return ERR_SERVICE_NOT_REGISTERED;
76 } 78 }
79
80 iter->second->Close();
81
77 registered_services.erase(iter); 82 registered_services.erase(iter);
78 return RESULT_SUCCESS; 83 return RESULT_SUCCESS;
79} 84}
80 85
81ResultVal<std::shared_ptr<Kernel::ClientPort>> ServiceManager::GetServicePort( 86ResultVal<Kernel::KClientPort*> ServiceManager::GetServicePort(const std::string& name) {
82 const std::string& name) {
83 87
84 CASCADE_CODE(ValidateServiceName(name)); 88 CASCADE_CODE(ValidateServiceName(name));
85 auto it = registered_services.find(name); 89 auto it = registered_services.find(name);
diff --git a/src/core/hle/service/sm/sm.h b/src/core/hle/service/sm/sm.h
index 8f6862fa9..aee9aefec 100644
--- a/src/core/hle/service/sm/sm.h
+++ b/src/core/hle/service/sm/sm.h
@@ -10,7 +10,7 @@
10#include <unordered_map> 10#include <unordered_map>
11 11
12#include "common/concepts.h" 12#include "common/concepts.h"
13#include "core/hle/kernel/client_port.h" 13#include "core/hle/kernel/k_client_port.h"
14#include "core/hle/kernel/object.h" 14#include "core/hle/kernel/object.h"
15#include "core/hle/kernel/server_port.h" 15#include "core/hle/kernel/server_port.h"
16#include "core/hle/result.h" 16#include "core/hle/result.h"
@@ -21,7 +21,7 @@ class System;
21} 21}
22 22
23namespace Kernel { 23namespace Kernel {
24class ClientPort; 24class KClientPort;
25class KClientSession; 25class KClientSession;
26class KernelCore; 26class KernelCore;
27class ServerPort; 27class ServerPort;
@@ -58,7 +58,7 @@ public:
58 ResultVal<std::shared_ptr<Kernel::ServerPort>> RegisterService(std::string name, 58 ResultVal<std::shared_ptr<Kernel::ServerPort>> RegisterService(std::string name,
59 u32 max_sessions); 59 u32 max_sessions);
60 ResultCode UnregisterService(const std::string& name); 60 ResultCode UnregisterService(const std::string& name);
61 ResultVal<std::shared_ptr<Kernel::ClientPort>> GetServicePort(const std::string& name); 61 ResultVal<Kernel::KClientPort*> GetServicePort(const std::string& name);
62 62
63 template <Common::DerivedFrom<Kernel::SessionRequestHandler> T> 63 template <Common::DerivedFrom<Kernel::SessionRequestHandler> T>
64 std::shared_ptr<T> GetService(const std::string& service_name) const { 64 std::shared_ptr<T> GetService(const std::string& service_name) const {
@@ -81,7 +81,7 @@ private:
81 std::unique_ptr<Controller> controller_interface; 81 std::unique_ptr<Controller> controller_interface;
82 82
83 /// Map of registered services, retrieved using GetServicePort. 83 /// Map of registered services, retrieved using GetServicePort.
84 std::unordered_map<std::string, std::shared_ptr<Kernel::ClientPort>> registered_services; 84 std::unordered_map<std::string, Kernel::KClientPort*> registered_services;
85 85
86 /// Kernel context 86 /// Kernel context
87 Kernel::KernelCore& kernel; 87 Kernel::KernelCore& kernel;
diff --git a/src/core/hle/service/time/time.cpp b/src/core/hle/service/time/time.cpp
index 413a00ae0..e7991012b 100644
--- a/src/core/hle/service/time/time.cpp
+++ b/src/core/hle/service/time/time.cpp
@@ -8,7 +8,7 @@
8#include "core/core_timing_util.h" 8#include "core/core_timing_util.h"
9#include "core/hardware_properties.h" 9#include "core/hardware_properties.h"
10#include "core/hle/ipc_helpers.h" 10#include "core/hle/ipc_helpers.h"
11#include "core/hle/kernel/client_port.h" 11#include "core/hle/kernel/k_client_port.h"
12#include "core/hle/kernel/k_scheduler.h" 12#include "core/hle/kernel/k_scheduler.h"
13#include "core/hle/kernel/kernel.h" 13#include "core/hle/kernel/kernel.h"
14#include "core/hle/service/time/interface.h" 14#include "core/hle/service/time/interface.h"