summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/kernel/hle_ipc.cpp3
-rw-r--r--src/core/hle/kernel/k_server_session.cpp5
-rw-r--r--src/core/hle/kernel/kernel.cpp22
-rw-r--r--src/core/hle/kernel/kernel.h8
4 files changed, 1 insertions, 37 deletions
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp
index 38abc4fd1..9f2175f82 100644
--- a/src/core/hle/kernel/hle_ipc.cpp
+++ b/src/core/hle/kernel/hle_ipc.cpp
@@ -53,9 +53,6 @@ bool SessionRequestManager::HasSessionRequestHandler(const HLERequestContext& co
53 53
54void SessionRequestHandler::ClientConnected(KServerSession* session) { 54void SessionRequestHandler::ClientConnected(KServerSession* session) {
55 session->ClientConnected(shared_from_this()); 55 session->ClientConnected(shared_from_this());
56
57 // Ensure our server session is tracked globally.
58 kernel.RegisterServerSession(session);
59} 56}
60 57
61void SessionRequestHandler::ClientDisconnected(KServerSession* session) { 58void SessionRequestHandler::ClientDisconnected(KServerSession* session) {
diff --git a/src/core/hle/kernel/k_server_session.cpp b/src/core/hle/kernel/k_server_session.cpp
index 5c6897a90..30c56ff29 100644
--- a/src/core/hle/kernel/k_server_session.cpp
+++ b/src/core/hle/kernel/k_server_session.cpp
@@ -27,10 +27,7 @@ namespace Kernel {
27 27
28KServerSession::KServerSession(KernelCore& kernel_) : KSynchronizationObject{kernel_} {} 28KServerSession::KServerSession(KernelCore& kernel_) : KSynchronizationObject{kernel_} {}
29 29
30KServerSession::~KServerSession() { 30KServerSession::~KServerSession() = default;
31 // Ensure that the global list tracking server sessions does not hold on to a reference.
32 kernel.UnregisterServerSession(this);
33}
34 31
35void KServerSession::Initialize(KSession* parent_session_, std::string&& name_, 32void KServerSession::Initialize(KSession* parent_session_, std::string&& name_,
36 std::shared_ptr<SessionRequestManager> manager_) { 33 std::shared_ptr<SessionRequestManager> manager_) {
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index b543f4083..bf5e39266 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -107,16 +107,6 @@ struct KernelCore::Impl {
107 for (auto* server_port : server_ports_) { 107 for (auto* server_port : server_ports_) {
108 server_port->Close(); 108 server_port->Close();
109 } 109 }
110 // Close all open server sessions.
111 std::unordered_set<KServerSession*> server_sessions_;
112 {
113 std::lock_guard lk(server_sessions_lock);
114 server_sessions_ = server_sessions;
115 server_sessions.clear();
116 }
117 for (auto* server_session : server_sessions_) {
118 server_session->Close();
119 }
120 110
121 // Ensure that the object list container is finalized and properly shutdown. 111 // Ensure that the object list container is finalized and properly shutdown.
122 object_list_container.Finalize(); 112 object_list_container.Finalize();
@@ -697,7 +687,6 @@ struct KernelCore::Impl {
697 } 687 }
698 688
699 std::mutex server_ports_lock; 689 std::mutex server_ports_lock;
700 std::mutex server_sessions_lock;
701 std::mutex registered_objects_lock; 690 std::mutex registered_objects_lock;
702 std::mutex registered_in_use_objects_lock; 691 std::mutex registered_in_use_objects_lock;
703 692
@@ -728,7 +717,6 @@ struct KernelCore::Impl {
728 std::unordered_map<std::string, ServiceInterfaceFactory> service_interface_factory; 717 std::unordered_map<std::string, ServiceInterfaceFactory> service_interface_factory;
729 NamedPortTable named_ports; 718 NamedPortTable named_ports;
730 std::unordered_set<KServerPort*> server_ports; 719 std::unordered_set<KServerPort*> server_ports;
731 std::unordered_set<KServerSession*> server_sessions;
732 std::unordered_set<KAutoObject*> registered_objects; 720 std::unordered_set<KAutoObject*> registered_objects;
733 std::unordered_set<KAutoObject*> registered_in_use_objects; 721 std::unordered_set<KAutoObject*> registered_in_use_objects;
734 722
@@ -932,16 +920,6 @@ KClientPort* KernelCore::CreateNamedServicePort(std::string name) {
932 return impl->CreateNamedServicePort(std::move(name)); 920 return impl->CreateNamedServicePort(std::move(name));
933} 921}
934 922
935void KernelCore::RegisterServerSession(KServerSession* server_session) {
936 std::lock_guard lk(impl->server_sessions_lock);
937 impl->server_sessions.insert(server_session);
938}
939
940void KernelCore::UnregisterServerSession(KServerSession* server_session) {
941 std::lock_guard lk(impl->server_sessions_lock);
942 impl->server_sessions.erase(server_session);
943}
944
945void KernelCore::RegisterKernelObject(KAutoObject* object) { 923void KernelCore::RegisterKernelObject(KAutoObject* object) {
946 std::lock_guard lk(impl->registered_objects_lock); 924 std::lock_guard lk(impl->registered_objects_lock);
947 impl->registered_objects.insert(object); 925 impl->registered_objects.insert(object);
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index d4306d5ef..7087bbda6 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -196,14 +196,6 @@ public:
196 /// Opens a port to a service previously registered with RegisterNamedService. 196 /// Opens a port to a service previously registered with RegisterNamedService.
197 KClientPort* CreateNamedServicePort(std::string name); 197 KClientPort* CreateNamedServicePort(std::string name);
198 198
199 /// Registers a server session with the gobal emulation state, to be freed on shutdown. This is
200 /// necessary because we do not emulate processes for HLE sessions.
201 void RegisterServerSession(KServerSession* server_session);
202
203 /// Unregisters a server session previously registered with RegisterServerSession when it was
204 /// destroyed during the current emulation session.
205 void UnregisterServerSession(KServerSession* server_session);
206
207 /// Registers all kernel objects with the global emulation state, this is purely for tracking 199 /// Registers all kernel objects with the global emulation state, this is purely for tracking
208 /// leaks after emulation has been shutdown. 200 /// leaks after emulation has been shutdown.
209 void RegisterKernelObject(KAutoObject* object); 201 void RegisterKernelObject(KAutoObject* object);