Explorar o código

Fix bad merge, and a few other fixes

gdkchan %!s(int64=8) %!d(string=hai) anos
pai
achega
6e69cd9284

+ 10 - 0
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<KThread, SchedulerThread> 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)

+ 2 - 0
Ryujinx.Core/OsHle/Horizon.cs

@@ -179,6 +179,8 @@ namespace Ryujinx.Core.OsHle
                 }
 
                 VsyncEvent.Dispose();
+
+                Scheduler.Dispose();
             }
         }
     }

+ 0 - 2
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();

+ 2 - 1
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)