diff --git a/Ryujinx.Core/OsHle/Handles/KProcessScheduler.cs b/Ryujinx.Core/OsHle/Handles/KProcessScheduler.cs index 238febd0..7cdf5f9c 100644 --- a/Ryujinx.Core/OsHle/Handles/KProcessScheduler.cs +++ b/Ryujinx.Core/OsHle/Handles/KProcessScheduler.cs @@ -95,6 +95,11 @@ namespace Ryujinx.Core.OsHle.Handles return Threads.Contains(SchedThread); } } + + public bool Remove(SchedulerThread SchedThread) + { + return Threads.Remove(SchedThread); + } } private ConcurrentDictionary AllThreads; @@ -153,6 +158,11 @@ namespace Ryujinx.Core.OsHle.Handles lock (SchedLock) { + if (AllThreads.TryRemove(Thread, out SchedulerThread SchedThread)) + { + WaitingToRun[Thread.ProcessorId].Remove(SchedThread); + } + SchedulerThread NewThread = WaitingToRun[Thread.ProcessorId].Pop(); if (NewThread == null) diff --git a/Ryujinx.Core/OsHle/Horizon.cs b/Ryujinx.Core/OsHle/Horizon.cs index 6442025f..9e113080 100644 --- a/Ryujinx.Core/OsHle/Horizon.cs +++ b/Ryujinx.Core/OsHle/Horizon.cs @@ -179,6 +179,8 @@ namespace Ryujinx.Core.OsHle } VsyncEvent.Dispose(); + + Scheduler.Dispose(); } } } diff --git a/Ryujinx.Core/OsHle/Process.cs b/Ryujinx.Core/OsHle/Process.cs index f56103dc..bacca9a3 100644 --- a/Ryujinx.Core/OsHle/Process.cs +++ b/Ryujinx.Core/OsHle/Process.cs @@ -370,8 +370,6 @@ namespace Ryujinx.Core.OsHle INvDrvServices.NvMapsById.DeleteProcess(this); INvDrvServices.NvMapsFb .DeleteProcess(this); - Scheduler.Dispose(); - AppletState.Dispose(); SvcHandler.Dispose(); diff --git a/Ryujinx.Core/OsHle/Services/Aud/IAudioDeviceService.cs b/Ryujinx.Core/OsHle/Services/Aud/IAudioDeviceService.cs index c89bd2d2..b27d1448 100644 --- a/Ryujinx.Core/OsHle/Services/Aud/IAudioDeviceService.cs +++ b/Ryujinx.Core/OsHle/Services/Aud/IAudioDeviceService.cs @@ -25,8 +25,9 @@ namespace Ryujinx.Core.OsHle.Services.Aud }; SystemEvent = new KEvent(); + //TODO: We shouldn't be signaling this here. - SystemEvent.Handle.Set(); + SystemEvent.WaitEvent.Set(); } public long ListAudioDeviceName(ServiceCtx Context)