From e0c3d9c8dfe317c3c65267efa5c4e2014d9727a6 Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Wed, 4 Apr 2018 16:07:44 -0300
Subject: [PATCH] Fix SvcGetThreadId

---
 Ryujinx.Core/OsHle/Svc/SvcThread.cs | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/Ryujinx.Core/OsHle/Svc/SvcThread.cs b/Ryujinx.Core/OsHle/Svc/SvcThread.cs
index 77cef44cc7..f58c2dc0af 100644
--- a/Ryujinx.Core/OsHle/Svc/SvcThread.cs
+++ b/Ryujinx.Core/OsHle/Svc/SvcThread.cs
@@ -1,6 +1,8 @@
 using ChocolArm64.State;
 using Ryujinx.Core.OsHle.Handles;
 
+using static Ryujinx.Core.OsHle.ErrorCode;
+
 namespace Ryujinx.Core.OsHle.Svc
 {
     partial class SvcHandler
@@ -61,11 +63,11 @@ namespace Ryujinx.Core.OsHle.Svc
         }
 
         private void SvcSleepThread(AThreadState ThreadState)
-        {           
+        {
             ulong NanoSecs = ThreadState.X0;
 
             KThread CurrThread = Process.GetThread(ThreadState.Tpidr);
-            
+
             if (NanoSecs == 0)
             {
                 Process.Scheduler.Yield(CurrThread);
@@ -117,7 +119,7 @@ namespace Ryujinx.Core.OsHle.Svc
 
         private void SvcGetThreadId(AThreadState ThreadState)
         {
-            int Handle = (int)ThreadState.X0;
+            int Handle = (int)ThreadState.X1;
 
             KThread Thread = Process.HandleTable.GetData<KThread>(Handle);
 
@@ -126,8 +128,12 @@ namespace Ryujinx.Core.OsHle.Svc
                 ThreadState.X0 = 0;
                 ThreadState.X1 = (ulong)Thread.ThreadId;
             }
+            else
+            {
+                Logging.Warn($"Tried to GetThreadId on invalid thread handle 0x{Handle:x8}!");
 
-            //TODO: Error codes.
+                ThreadState.X0 = MakeError(ErrorModule.Kernel, KernelErr.InvalidHandle);
+            }
         }
     }
 }
\ No newline at end of file