aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2018-04-04 16:07:44 -0300
committergdkchan <gab.dark.100@gmail.com>2018-04-04 16:07:44 -0300
commite0c3d9c8dfe317c3c65267efa5c4e2014d9727a6 (patch)
tree5a8e5be1fe1838f71997c02f5930e4eb7ccab75d
parent0ac4681fa06cac24b14bff45f334f453baf74934 (diff)
Fix SvcGetThreadId
-rw-r--r--Ryujinx.Core/OsHle/Svc/SvcThread.cs14
1 files changed, 10 insertions, 4 deletions
diff --git a/Ryujinx.Core/OsHle/Svc/SvcThread.cs b/Ryujinx.Core/OsHle/Svc/SvcThread.cs
index 77cef44c..f58c2dc0 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