From 8105f27dfebc8504faa345dcc016aab6b0b7a70e Mon Sep 17 00:00:00 2001 From: Ac_K Date: Sun, 16 Jun 2019 03:46:37 +0200 Subject: [PATCH] Fix the handle leak --- Ryujinx.HLE/HOS/Services/Am/ISelfController.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Ryujinx.HLE/HOS/Services/Am/ISelfController.cs b/Ryujinx.HLE/HOS/Services/Am/ISelfController.cs index 105d99c52c..47ae207b5b 100644 --- a/Ryujinx.HLE/HOS/Services/Am/ISelfController.cs +++ b/Ryujinx.HLE/HOS/Services/Am/ISelfController.cs @@ -14,7 +14,9 @@ namespace Ryujinx.HLE.HOS.Services.Am public override IReadOnlyDictionary Commands => _commands; private KEvent _libraryAppletLaunchableEvent; + private KEvent _accumulatedSuspendedTickChangedEvent; + private int _accumulatedSuspendedTickChangedEventHandle = 0; private int _idleTimeDetectionExtension; @@ -202,19 +204,19 @@ namespace Ryujinx.HLE.HOS.Services.Am // GetAccumulatedSuspendedTickChangedEvent() -> handle public long GetAccumulatedSuspendedTickChangedEvent(ServiceCtx context) { - if (_accumulatedSuspendedTickChangedEvent == null) + if (_accumulatedSuspendedTickChangedEventHandle == 0) { _accumulatedSuspendedTickChangedEvent = new KEvent(context.Device.System); _accumulatedSuspendedTickChangedEvent.ReadableEvent.Signal(); + + if (context.Process.HandleTable.GenerateHandle(_accumulatedSuspendedTickChangedEvent.ReadableEvent, out _accumulatedSuspendedTickChangedEventHandle) != KernelResult.Success) + { + throw new InvalidOperationException("Out of handles!"); + } } - if (context.Process.HandleTable.GenerateHandle(_accumulatedSuspendedTickChangedEvent.ReadableEvent, out int handle) != KernelResult.Success) - { - throw new InvalidOperationException("Out of handles!"); - } - - context.Response.HandleDesc = IpcHandleDesc.MakeCopy(handle); + context.Response.HandleDesc = IpcHandleDesc.MakeCopy(_accumulatedSuspendedTickChangedEventHandle); return 0; }