aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 2aefb0db5..406352003 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
21 21
22 public long CurrentTime { get; private set; } 22 public long CurrentTime { get; private set; }
23 23
24 public IEnumerable<MultiWaitHolderBase> MultiWaits => _multiWaits;
25
24 public MultiWaitImpl() 26 public MultiWaitImpl()
25 { 27 {
26 _multiWaits = new List<MultiWaitHolderBase>(); 28 _multiWaits = new List<MultiWaitHolderBase>();
diff --git a/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs b/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs
index 0e73e3f88..41d17802a 100644
--- a/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs
+++ b/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs
@@ -1,4 +1,5 @@
1using Ryujinx.Horizon.Sdk.OsTypes.Impl; 1using Ryujinx.Horizon.Sdk.OsTypes.Impl;
2using System.Collections.Generic;
2 3
3namespace Ryujinx.Horizon.Sdk.OsTypes 4namespace Ryujinx.Horizon.Sdk.OsTypes
4{ 5{
@@ -6,6 +7,8 @@ namespace Ryujinx.Horizon.Sdk.OsTypes
6 { 7 {
7 private readonly MultiWaitImpl _impl; 8 private readonly MultiWaitImpl _impl;
8 9
10 public IEnumerable<MultiWaitHolderBase> MultiWaits => _impl.MultiWaits;
11
9 public MultiWait() 12 public MultiWait()
10 { 13 {
11 _impl = new MultiWaitImpl(); 14 _impl = new MultiWaitImpl();
diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs
index 9886e1cbf..570e3c802 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;
3using Ryujinx.Horizon.Sdk.Sf.Cmif; 3using Ryujinx.Horizon.Sdk.Sf.Cmif;
4using Ryujinx.Horizon.Sdk.Sm; 4using Ryujinx.Horizon.Sdk.Sm;
5using System; 5using System;
6using System.Linq;
6 7
7namespace Ryujinx.Horizon.Sdk.Sf.Hipc 8namespace Ryujinx.Horizon.Sdk.Sf.Hipc
8{ 9{
@@ -116,6 +117,18 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc
116 while (WaitAndProcessRequestsImpl()) 117 while (WaitAndProcessRequestsImpl())
117 { 118 {
118 } 119 }
120
121 // Unlink pending sessions, dispose expects them to be already unlinked.
122
123 ServerSession[] serverSessions = Enumerable.OfType<ServerSession>(_multiWait.MultiWaits).ToArray();
124
125 foreach (ServerSession serverSession in serverSessions)
126 {
127 if (serverSession.IsLinked)
128 {
129 serverSession.UnlinkFromMultiWaitHolder();
130 }
131 }
119 } 132 }
120 133
121 public void WaitAndProcessRequests() 134 public void WaitAndProcessRequests()