Fix the handle leak
This commit is contained in:
parent
10b5fcb33b
commit
8105f27dfe
1 changed files with 9 additions and 7 deletions
|
@ -14,7 +14,9 @@ namespace Ryujinx.HLE.HOS.Services.Am
|
||||||
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands;
|
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands;
|
||||||
|
|
||||||
private KEvent _libraryAppletLaunchableEvent;
|
private KEvent _libraryAppletLaunchableEvent;
|
||||||
|
|
||||||
private KEvent _accumulatedSuspendedTickChangedEvent;
|
private KEvent _accumulatedSuspendedTickChangedEvent;
|
||||||
|
private int _accumulatedSuspendedTickChangedEventHandle = 0;
|
||||||
|
|
||||||
private int _idleTimeDetectionExtension;
|
private int _idleTimeDetectionExtension;
|
||||||
|
|
||||||
|
@ -202,19 +204,19 @@ namespace Ryujinx.HLE.HOS.Services.Am
|
||||||
// GetAccumulatedSuspendedTickChangedEvent() -> handle<copy>
|
// GetAccumulatedSuspendedTickChangedEvent() -> handle<copy>
|
||||||
public long GetAccumulatedSuspendedTickChangedEvent(ServiceCtx context)
|
public long GetAccumulatedSuspendedTickChangedEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
if (_accumulatedSuspendedTickChangedEvent == null)
|
if (_accumulatedSuspendedTickChangedEventHandle == 0)
|
||||||
{
|
{
|
||||||
_accumulatedSuspendedTickChangedEvent = new KEvent(context.Device.System);
|
_accumulatedSuspendedTickChangedEvent = new KEvent(context.Device.System);
|
||||||
|
|
||||||
_accumulatedSuspendedTickChangedEvent.ReadableEvent.Signal();
|
_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)
|
context.Response.HandleDesc = IpcHandleDesc.MakeCopy(_accumulatedSuspendedTickChangedEventHandle);
|
||||||
{
|
|
||||||
throw new InvalidOperationException("Out of handles!");
|
|
||||||
}
|
|
||||||
|
|
||||||
context.Response.HandleDesc = IpcHandleDesc.MakeCopy(handle);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue