diff options
author | gdkchan <gab.dark.100@gmail.com> | 2023-04-25 19:33:14 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-25 19:33:14 -0300 |
commit | 097562bc6c227c42f803ce1078fcb4adf06cd20c (patch) | |
tree | 6e737fa6cdf49fbea157a95e3057b131a7d24013 /Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs | |
parent | db4242c5dcca2df90374f58ddeb3601c1eb06cce (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.cs | 12 |
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) { |