Просмотр исходного кода

Allow using self thread id on some svcs (fixes #117)

gdkchan 8 лет назад
Родитель
Сommit
3603497a13
2 измененных файлов с 12 добавлено и 11 удалено
  1. 3 2
      Ryujinx.Core/OsHle/Kernel/SvcHandler.cs
  2. 9 9
      Ryujinx.Core/OsHle/Kernel/SvcThread.cs

+ 3 - 2
Ryujinx.Core/OsHle/Kernel/SvcHandler.cs

@@ -28,7 +28,8 @@ namespace Ryujinx.Core.OsHle.Kernel
 
 
         private ulong CurrentHeapSize;
         private ulong CurrentHeapSize;
 
 
-        private const uint SelfHandle = 0xffff8001;
+        private const uint SelfThreadHandle  = 0xffff8000;
+        private const uint SelfProcessHandle = 0xffff8001;
 
 
         private static Random Rng;
         private static Random Rng;
 
 
@@ -111,7 +112,7 @@ namespace Ryujinx.Core.OsHle.Kernel
 
 
         private KThread GetThread(long Tpidr, int Handle)
         private KThread GetThread(long Tpidr, int Handle)
         {
         {
-            if ((uint)Handle == SelfHandle)
+            if ((uint)Handle == SelfThreadHandle)
             {
             {
                 return Process.GetThread(Tpidr);
                 return Process.GetThread(Tpidr);
             }
             }

+ 9 - 9
Ryujinx.Core/OsHle/Kernel/SvcThread.cs

@@ -87,12 +87,12 @@ namespace Ryujinx.Core.OsHle.Kernel
         {
         {
             int Handle = (int)ThreadState.X1;
             int Handle = (int)ThreadState.X1;
 
 
-            KThread CurrThread = Process.HandleTable.GetData<KThread>(Handle);
+            KThread Thread = GetThread(ThreadState.Tpidr, Handle);
 
 
-            if (CurrThread != null)
+            if (Thread != null)
             {
             {
                 ThreadState.X0 = 0;
                 ThreadState.X0 = 0;
-                ThreadState.X1 = (ulong)CurrThread.ActualPriority;
+                ThreadState.X1 = (ulong)Thread.ActualPriority;
             }
             }
             else
             else
             {
             {
@@ -107,11 +107,11 @@ namespace Ryujinx.Core.OsHle.Kernel
             int Handle   = (int)ThreadState.X0;
             int Handle   = (int)ThreadState.X0;
             int Priority = (int)ThreadState.X1;
             int Priority = (int)ThreadState.X1;
 
 
-            KThread CurrThread = Process.HandleTable.GetData<KThread>(Handle);
+            KThread Thread = GetThread(ThreadState.Tpidr, Handle);
 
 
-            if (CurrThread != null)
+            if (Thread != null)
             {
             {
-                CurrThread.SetPriority(Priority);
+                Thread.SetPriority(Priority);
 
 
                 ThreadState.X0 = 0;
                 ThreadState.X0 = 0;
             }
             }
@@ -139,12 +139,12 @@ namespace Ryujinx.Core.OsHle.Kernel
         {
         {
             int Handle = (int)ThreadState.X1;
             int Handle = (int)ThreadState.X1;
 
 
-            KThread CurrThread = Process.HandleTable.GetData<KThread>(Handle);
+            KThread Thread = GetThread(ThreadState.Tpidr, Handle);
 
 
-            if (CurrThread != null)
+            if (Thread != null)
             {
             {
                 ThreadState.X0 = 0;
                 ThreadState.X0 = 0;
-                ThreadState.X1 = (ulong)CurrThread.ThreadId;
+                ThreadState.X1 = (ulong)Thread.ThreadId;
             }
             }
             else
             else
             {
             {