From 07c9d9bdbdbf632624ca01ea83dbfa51176415ae Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 10 Mar 2022 23:45:54 -0800 Subject: core: hle: kernel: Use weak_ptr where possible for SessionRequestHandler and SessionRequestManager. --- src/core/hle/kernel/k_server_session.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/core/hle/kernel/k_server_session.cpp') diff --git a/src/core/hle/kernel/k_server_session.cpp b/src/core/hle/kernel/k_server_session.cpp index 4d94eb9cf..9cfbcbbc9 100644 --- a/src/core/hle/kernel/k_server_session.cpp +++ b/src/core/hle/kernel/k_server_session.cpp @@ -98,7 +98,12 @@ ResultCode KServerSession::HandleDomainSyncRequest(Kernel::HLERequestContext& co UNREACHABLE(); return ResultSuccess; // Ignore error if asserts are off } - return manager->DomainHandler(object_id - 1)->HandleSyncRequest(*this, context); + if (auto strong_ptr = manager->DomainHandler(object_id - 1).lock()) { + return strong_ptr->HandleSyncRequest(*this, context); + } else { + UNREACHABLE(); + return ResultSuccess; + } case IPC::DomainMessageHeader::CommandType::CloseVirtualHandle: { LOG_DEBUG(IPC, "CloseVirtualHandle, object_id=0x{:08X}", object_id); -- cgit v1.2.3 From ed67e1dd10c248132b47257368d636cf794625ce Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 11 Mar 2022 00:13:21 -0800 Subject: core: hle: kernel: k_server_session: Ensure SessionRequestManager is freed. --- src/core/hle/kernel/k_server_session.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/core/hle/kernel/k_server_session.cpp') diff --git a/src/core/hle/kernel/k_server_session.cpp b/src/core/hle/kernel/k_server_session.cpp index 9cfbcbbc9..5c6897a90 100644 --- a/src/core/hle/kernel/k_server_session.cpp +++ b/src/core/hle/kernel/k_server_session.cpp @@ -49,6 +49,9 @@ void KServerSession::Destroy() { parent->OnServerClosed(); parent->Close(); + + // Release host emulation members. + manager.reset(); } void KServerSession::OnClientClosed() { -- cgit v1.2.3 From 51589c5e2128b2d338dceac11b7252432d4955c2 Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 11 Mar 2022 17:17:41 -0800 Subject: 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. --- src/core/hle/kernel/k_server_session.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'src/core/hle/kernel/k_server_session.cpp') 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 { KServerSession::KServerSession(KernelCore& kernel_) : KSynchronizationObject{kernel_} {} -KServerSession::~KServerSession() { - // Ensure that the global list tracking server sessions does not hold on to a reference. - kernel.UnregisterServerSession(this); -} +KServerSession::~KServerSession() = default; void KServerSession::Initialize(KSession* parent_session_, std::string&& name_, std::shared_ptr manager_) { -- cgit v1.2.3