diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2018-04-04 16:07:44 -0300 |
|---|---|---|
| committer | gdkchan <gab.dark.100@gmail.com> | 2018-04-04 16:07:44 -0300 |
| commit | e0c3d9c8dfe317c3c65267efa5c4e2014d9727a6 (patch) | |
| tree | 5a8e5be1fe1838f71997c02f5930e4eb7ccab75d | |
| parent | 0ac4681fa06cac24b14bff45f334f453baf74934 (diff) | |
Fix SvcGetThreadId
| -rw-r--r-- | Ryujinx.Core/OsHle/Svc/SvcThread.cs | 14 |
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 |
