mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-11-23 22:32:08 +00:00
Relax GetThreadContext3 by allowing it to get the context of a running thread
This commit is contained in:
parent
2f29894d9f
commit
b8be89ab2d
3 changed files with 0 additions and 31 deletions
|
@ -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)
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue