aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2023-04-25 19:33:14 -0300
committerGitHub <noreply@github.com>2023-04-25 19:33:14 -0300
commit097562bc6c227c42f803ce1078fcb4adf06cd20c (patch)
tree6e737fa6cdf49fbea157a95e3057b131a7d24013 /Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs
parentdb4242c5dcca2df90374f58ddeb3601c1eb06cce (diff)
Add missing check for thread termination on ArbitrateLock (#4722)1.1.732
* Add missing check for thread termination on ArbitrateLock * Use TerminationRequested in all places where it can be used
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs')
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs12
1 files changed, 4 insertions, 8 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs b/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs
index 6fd49605..63396468 100644
--- a/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs
@@ -99,11 +99,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
private int _shallBeTerminated;
- public bool ShallBeTerminated
- {
- get => _shallBeTerminated != 0;
- set => _shallBeTerminated = value ? 1 : 0;
- }
+ private bool ShallBeTerminated => _shallBeTerminated != 0;
public bool TerminationRequested => ShallBeTerminated || SchedFlags == ThreadSchedState.TerminationPending;
@@ -322,7 +318,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
ThreadSchedState result;
- if (Interlocked.CompareExchange(ref _shallBeTerminated, 1, 0) == 0)
+ if (Interlocked.Exchange(ref _shallBeTerminated, 1) == 0)
{
if ((SchedFlags & ThreadSchedState.LowMask) == ThreadSchedState.None)
{
@@ -470,7 +466,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
{
KernelContext.CriticalSection.Enter();
- if (ShallBeTerminated || SchedFlags == ThreadSchedState.TerminationPending)
+ if (TerminationRequested)
{
KernelContext.CriticalSection.Leave();
@@ -552,7 +548,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
return KernelResult.InvalidState;
}
- if (!ShallBeTerminated && SchedFlags != ThreadSchedState.TerminationPending)
+ if (!TerminationRequested)
{
if (pause)
{