From ce09450743ad36f6478af1a21b5fbff283f08e59 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Sat, 20 Jul 2024 16:17:40 -0300 Subject: Unlink server sessions from multi-wait when service stops processing requests (#7072) --- src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs') diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs index 9886e1cb..570e3c80 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs @@ -3,6 +3,7 @@ using Ryujinx.Horizon.Sdk.OsTypes; using Ryujinx.Horizon.Sdk.Sf.Cmif; using Ryujinx.Horizon.Sdk.Sm; using System; +using System.Linq; namespace Ryujinx.Horizon.Sdk.Sf.Hipc { @@ -116,6 +117,18 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc while (WaitAndProcessRequestsImpl()) { } + + // Unlink pending sessions, dispose expects them to be already unlinked. + + ServerSession[] serverSessions = Enumerable.OfType(_multiWait.MultiWaits).ToArray(); + + foreach (ServerSession serverSession in serverSessions) + { + if (serverSession.IsLinked) + { + serverSession.UnlinkFromMultiWaitHolder(); + } + } } public void WaitAndProcessRequests() -- cgit v1.2.3