aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2024-07-20 16:17:40 -0300
committerGitHub <noreply@github.com>2024-07-20 16:17:40 -0300
commitce09450743ad36f6478af1a21b5fbff283f08e59 (patch)
tree2bcd14bc6fe4f9163fd761f32e7993780017f965 /src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs
parent2cb80f37d42261bb583e518eb729b62a442cdb15 (diff)
Unlink server sessions from multi-wait when service stops processing requests (#7072)
Diffstat (limited to 'src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs')
-rw-r--r--src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs13
1 files changed, 13 insertions, 0 deletions
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<ServerSession>(_multiWait.MultiWaits).ToArray();
+
+ foreach (ServerSession serverSession in serverSessions)
+ {
+ if (serverSession.IsLinked)
+ {
+ serverSession.UnlinkFromMultiWaitHolder();
+ }
+ }
}
public void WaitAndProcessRequests()