0
0
Fork 0

Relax GetThreadContext3 by allowing it to get the context of a running thread

This commit is contained in:
gdkchan 2018-06-26 01:26:21 -03:00
parent 2f29894d9f
commit b8be89ab2d
3 changed files with 0 additions and 31 deletions

View file

@ -47,8 +47,6 @@ namespace Ryujinx.HLE.OsHle.Handles
if (TryAddToCore(Thread)) if (TryAddToCore(Thread))
{ {
SchedThread.IsRunning = true;
Thread.Thread.Execute(); Thread.Thread.Execute();
PrintDbgThreadInfo(Thread, "running."); PrintDbgThreadInfo(Thread, "running.");
@ -110,16 +108,6 @@ namespace Ryujinx.HLE.OsHle.Handles
} }
} }
public bool IsThreadRunning(KThread Thread)
{
if (!AllThreads.TryGetValue(Thread, out SchedulerThread SchedThread))
{
return false;
}
return SchedThread.IsRunning;
}
public void EnterWait(KThread Thread, int TimeoutMs = Timeout.Infinite) public void EnterWait(KThread Thread, int TimeoutMs = Timeout.Infinite)
{ {
SchedulerThread SchedThread = AllThreads[Thread]; SchedulerThread SchedThread = AllThreads[Thread];
@ -170,8 +158,6 @@ namespace Ryujinx.HLE.OsHle.Handles
{ {
lock (SchedLock) lock (SchedLock)
{ {
AllThreads[Thread].IsRunning = false;
PrintDbgThreadInfo(Thread, "suspended."); PrintDbgThreadInfo(Thread, "suspended.");
int ActualCore = Thread.ActualCore; int ActualCore = Thread.ActualCore;
@ -263,8 +249,6 @@ namespace Ryujinx.HLE.OsHle.Handles
private void TryResumingExecution(SchedulerThread SchedThread) private void TryResumingExecution(SchedulerThread SchedThread)
{ {
SchedThread.IsRunning = false;
KThread Thread = SchedThread.Thread; KThread Thread = SchedThread.Thread;
PrintDbgThreadInfo(Thread, "trying to resume..."); PrintDbgThreadInfo(Thread, "trying to resume...");
@ -275,8 +259,6 @@ namespace Ryujinx.HLE.OsHle.Handles
{ {
if (TryAddToCore(Thread)) if (TryAddToCore(Thread))
{ {
SchedThread.IsRunning = true;
PrintDbgThreadInfo(Thread, "resuming execution..."); PrintDbgThreadInfo(Thread, "resuming execution...");
return; return;
@ -306,8 +288,6 @@ namespace Ryujinx.HLE.OsHle.Handles
{ {
PrintDbgThreadInfo(SchedThread.Thread, "running."); PrintDbgThreadInfo(SchedThread.Thread, "running.");
} }
SchedThread.IsRunning = true;
} }
public void Resort(KThread Thread) public void Resort(KThread Thread)

View file

@ -11,8 +11,6 @@ namespace Ryujinx.HLE.OsHle.Handles
public bool IsActive { get; set; } public bool IsActive { get; set; }
public bool IsRunning { get; set; }
public AutoResetEvent WaitSync { get; private set; } public AutoResetEvent WaitSync { get; private set; }
public ManualResetEvent WaitActivity { get; private set; } public ManualResetEvent WaitActivity { get; private set; }
public AutoResetEvent WaitSched { get; private set; } public AutoResetEvent WaitSched { get; private set; }

View file

@ -306,15 +306,6 @@ namespace Ryujinx.HLE.OsHle.Kernel
return; return;
} }
if (Process.Scheduler.IsThreadRunning(Thread))
{
Ns.Log.PrintWarning(LogClass.KernelSvc, $"Thread handle 0x{Handle:x8} is running!");
ThreadState.X0 = MakeError(ErrorModule.Kernel, KernelErr.InvalidState);
return;
}
Memory.WriteUInt64(Position + 0x0, ThreadState.X0); Memory.WriteUInt64(Position + 0x0, ThreadState.X0);
Memory.WriteUInt64(Position + 0x8, ThreadState.X1); Memory.WriteUInt64(Position + 0x8, ThreadState.X1);
Memory.WriteUInt64(Position + 0x10, ThreadState.X2); Memory.WriteUInt64(Position + 0x10, ThreadState.X2);