mirror of
				https://github.com/ryujinx-mirror/ryujinx.git
				synced 2025-11-04 08:59:04 -06:00 
			
		
		
		
	Unlink server sessions from multi-wait when service stops processing requests (#7072)
This commit is contained in:
		@@ -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>();
 | 
			
		||||
 
 | 
			
		||||
@@ -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();
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user