forked from Mirror/Ryujinx
Fix SvcGetThreadId
This commit is contained in:
parent
0ac4681fa0
commit
e0c3d9c8df
1 changed files with 10 additions and 4 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in a new issue