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