From 097562bc6c227c42f803ce1078fcb4adf06cd20c Mon Sep 17 00:00:00 2001 From: gdkchan <gab.dark.100@gmail.com> Date: Tue, 25 Apr 2023 19:33:14 -0300 Subject: Add missing check for thread termination on ArbitrateLock (#4722) * Add missing check for thread termination on ArbitrateLock * Use TerminationRequested in all places where it can be used --- Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs') 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) { -- cgit v1.2.3-70-g09d2