aboutsummaryrefslogtreecommitdiff
path: root/src
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
parent2cb80f37d42261bb583e518eb729b62a442cdb15 (diff)
Unlink server sessions from multi-wait when service stops processing requests (#7072)1.1.1355
Diffstat (limited to 'src')
-rw-r--r--src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs2
-rw-r--r--src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs3
-rw-r--r--src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs13
3 files changed, 18 insertions, 0 deletions
diff --git a/src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs b/src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs
index 2aefb0db..40635200 100644
--- a/src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs
+++ b/src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs
@@ -21,6 +21,8 @@ namespace Ryujinx.Horizon.Sdk.OsTypes.Impl
public long CurrentTime { get; private set; }
+ public IEnumerable<MultiWaitHolderBase> MultiWaits => _multiWaits;
+
public MultiWaitImpl()
{
_multiWaits = new List<MultiWaitHolderBase>();
diff --git a/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs b/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs
index 0e73e3f8..41d17802 100644
--- a/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs
+++ b/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs
@@ -1,4 +1,5 @@
using Ryujinx.Horizon.Sdk.OsTypes.Impl;
+using System.Collections.Generic;
namespace Ryujinx.Horizon.Sdk.OsTypes
{
@@ -6,6 +7,8 @@ namespace Ryujinx.Horizon.Sdk.OsTypes
{
private readonly MultiWaitImpl _impl;
+ public IEnumerable<MultiWaitHolderBase> MultiWaits => _impl.MultiWaits;
+
public MultiWait()
{
_impl = new MultiWaitImpl();
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()