diff options
author | gdkchan <gab.dark.100@gmail.com> | 2024-07-20 16:17:40 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-20 16:17:40 -0300 |
commit | ce09450743ad36f6478af1a21b5fbff283f08e59 (patch) | |
tree | 2bcd14bc6fe4f9163fd761f32e7993780017f965 /src | |
parent | 2cb80f37d42261bb583e518eb729b62a442cdb15 (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.cs | 2 | ||||
-rw-r--r-- | src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs | 3 | ||||
-rw-r--r-- | src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs | 13 |
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() |