From 28ab4a1a01e15ad5ada032ec1a5d361b63faf487 Mon Sep 17 00:00:00 2001 From: Maufeat Date: Sun, 30 Aug 2026 08:00:18 +0200 Subject: [kernel, service] Return ResultSessionClosed when a session is closed (#4318) - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- I tried to run a homebrew game which tried to reply to a closed service. nnSdk expected ResultSessionClosed, we replied with ResultSuccess which mostly works but some have stricter handling and would terminate with abort. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4318 Reviewed-by: Lizzie and Samuel Reviewed-by: crueter --- src/core/hle/kernel/k_server_session.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 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 e3cfe6b6c2..35b4e78534 100644 --- a/src/core/hle/kernel/k_server_session.cpp +++ b/src/core/hle/kernel/k_server_session.cpp @@ -1216,7 +1216,7 @@ Result KServerSession::ReceiveRequest(KernelCore& kernel, uintptr_t server_messa } Result KServerSession::SendReply(KernelCore& kernel, uintptr_t server_message, uintptr_t server_buffer_size, - KPhysicalAddress server_message_paddr, bool is_hle) { + KPhysicalAddress server_message_paddr, bool is_hle, bool session_closed) { // Lock the session. KScopedLightLock lk{m_lock}; @@ -1248,7 +1248,7 @@ Result KServerSession::SendReply(KernelCore& kernel, uintptr_t server_message, u KEvent* event = request->GetEvent(); // Check whether we're closed. - const bool closed = (client_thread == nullptr || m_parent->IsClientClosed()); + const bool closed = (client_thread == nullptr || m_parent->IsClientClosed() || session_closed); Result result = ResultSuccess; if (!closed) { -- cgit v1.2.3