diff --git a/src/core/hle/kernel/hle_ipc.h b/src/core/hle/kernel/hle_ipc.h
index b58e57b142b79015deae3de48ee4abbda664d214..bf8cfc2a3cceb4410d8dbe6ba9943815394fd53d 100644
--- a/src/core/hle/kernel/hle_ipc.h
+++ b/src/core/hle/kernel/hle_ipc.h
@@ -40,7 +40,7 @@ public:
      * this request (ServerSession, Originator thread, Translated command buffer, etc).
      * @returns ResultCode the result code of the translate operation.
      */
-    virtual void HandleSyncRequest(SharedPtr<ServerSession> server_session) = 0;
+    virtual ResultCode HandleSyncRequest(SharedPtr<ServerSession> server_session) = 0;
 
     /**
      * Signals that a client has just connected to this HLE handler and keeps the
diff --git a/src/core/hle/kernel/server_session.cpp b/src/core/hle/kernel/server_session.cpp
index 337896abf9775cf6e675f76ddd2538c3fa40b210..68e5cc2b7889fd4d1a17006fc4e070a48f290f93 100644
--- a/src/core/hle/kernel/server_session.cpp
+++ b/src/core/hle/kernel/server_session.cpp
@@ -60,12 +60,13 @@ ResultCode ServerSession::HandleSyncRequest(SharedPtr<Thread> thread) {
     // similar.
 
     // If this ServerSession has an associated HLE handler, forward the request to it.
+    ResultCode result{RESULT_SUCCESS};
     if (hle_handler != nullptr) {
         // Attempt to translate the incoming request's command buffer.
-        ResultCode result = TranslateHLERequest(this);
-        if (result.IsError())
-            return result;
-        hle_handler->HandleSyncRequest(SharedPtr<ServerSession>(this));
+        ResultCode translate_result = TranslateHLERequest(this);
+        if (translate_result.IsError())
+            return translate_result;
+        result = hle_handler->HandleSyncRequest(SharedPtr<ServerSession>(this));
         // TODO(Subv): Translate the response command buffer.
     } else {
         // Add the thread to the list of threads that have issued a sync request with this
@@ -76,7 +77,7 @@ ResultCode ServerSession::HandleSyncRequest(SharedPtr<Thread> thread) {
     // If this ServerSession does not have an HLE implementation, just wake up the threads waiting
     // on it.
     WakeupAllWaitingThreads();
-    return RESULT_SUCCESS;
+    return result;
 }
 
 ServerSession::SessionPair ServerSession::CreateSessionPair(const std::string& name,
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index 826a775d1177262c5ac4244d9c77c4695ccfd898..b5d798e26c6246c3b215d31995b7a82ac531975f 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -124,7 +124,7 @@ void ServiceFrameworkBase::InvokeRequest(Kernel::HLERequestContext& ctx) {
     handler_invoker(this, info->handler_callback, ctx);
 }
 
-void ServiceFrameworkBase::HandleSyncRequest(SharedPtr<ServerSession> server_session) {
+ResultCode ServiceFrameworkBase::HandleSyncRequest(SharedPtr<ServerSession> server_session) {
     u32* cmd_buf = (u32*)Memory::GetPointer(Kernel::GetCurrentThread()->GetTLSAddress());
 
     // TODO(yuriks): The kernel should be the one handling this as part of translation after
@@ -137,7 +137,7 @@ void ServiceFrameworkBase::HandleSyncRequest(SharedPtr<ServerSession> server_ses
     case IPC::CommandType::Close: {
         IPC::RequestBuilder rb{context, 1};
         rb.Push(RESULT_SUCCESS);
-        break;
+        return ResultCode(ErrorModule::HIPC, ErrorDescription::RemoteProcessDead);
     }
     case IPC::CommandType::Control: {
         SM::g_service_manager->InvokeControlRequest(context);
@@ -153,6 +153,8 @@ void ServiceFrameworkBase::HandleSyncRequest(SharedPtr<ServerSession> server_ses
 
     context.WriteToOutgoingCommandBuffer(cmd_buf, *Kernel::g_current_process,
                                          Kernel::g_handle_table);
+
+    return RESULT_SUCCESS;
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h
index ff76dd2dee7f80cb3a6a89d7f632bc6e65c1b3ee..ad5f9529248633afd2cab95c3074c7781f353841 100644
--- a/src/core/hle/service/service.h
+++ b/src/core/hle/service/service.h
@@ -63,7 +63,7 @@ public:
 
     void InvokeRequest(Kernel::HLERequestContext& ctx);
 
-    void HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> server_session) override;
+    ResultCode HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> server_session) override;
 
 protected:
     /// Member-function pointer type of SyncRequest handlers.