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

This commit is contained in:
gdkchan 2018-05-11 23:05:06 -03:00
parent 0381a09227
commit 3603497a13
2 changed files with 12 additions and 11 deletions

View file

@ -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);
} }

View file

@ -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
{ {