diff options
| author | 2022-03-11 17:17:41 -0800 | |
|---|---|---|
| committer | 2022-03-14 18:14:54 -0700 | |
| commit | 51589c5e2128b2d338dceac11b7252432d4955c2 (patch) | |
| tree | 68f884db2539561933dbd4c2db623ffef6386f25 /src | |
| parent | core: hle: kernel: k_process: Remove handle table finalize, reset page table. (diff) | |
| download | yuzu-51589c5e2128b2d338dceac11b7252432d4955c2.tar.gz yuzu-51589c5e2128b2d338dceac11b7252432d4955c2.tar.xz yuzu-51589c5e2128b2d338dceac11b7252432d4955c2.zip | |
core: hle: kernel: Remove server session tracking.
- These are now allocated/managed by emulated memory, so we do not need to track and free them on shutdown.
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/kernel/hle_ipc.cpp | 3 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_server_session.cpp | 5 | ||||
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 22 | ||||
| -rw-r--r-- | src/core/hle/kernel/kernel.h | 8 |
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 | ||
| 54 | void SessionRequestHandler::ClientConnected(KServerSession* session) { | 54 | void 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 | ||
| 61 | void SessionRequestHandler::ClientDisconnected(KServerSession* session) { | 58 | void 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 | ||
| 28 | KServerSession::KServerSession(KernelCore& kernel_) : KSynchronizationObject{kernel_} {} | 28 | KServerSession::KServerSession(KernelCore& kernel_) : KSynchronizationObject{kernel_} {} |
| 29 | 29 | ||
| 30 | KServerSession::~KServerSession() { | 30 | KServerSession::~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 | ||
| 35 | void KServerSession::Initialize(KSession* parent_session_, std::string&& name_, | 32 | void 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 | ||
| 935 | void KernelCore::RegisterServerSession(KServerSession* server_session) { | ||
| 936 | std::lock_guard lk(impl->server_sessions_lock); | ||
| 937 | impl->server_sessions.insert(server_session); | ||
| 938 | } | ||
| 939 | |||
| 940 | void KernelCore::UnregisterServerSession(KServerSession* server_session) { | ||
| 941 | std::lock_guard lk(impl->server_sessions_lock); | ||
| 942 | impl->server_sessions.erase(server_session); | ||
| 943 | } | ||
| 944 | |||
| 945 | void KernelCore::RegisterKernelObject(KAutoObject* object) { | 923 | void 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); |