From 097562bc6c227c42f803ce1078fcb4adf06cd20c Mon Sep 17 00:00:00 2001 From: gdkchan 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/KAddressArbiter.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs') diff --git a/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs b/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs index a5f9df5e..74867b44 100644 --- a/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs +++ b/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs @@ -31,6 +31,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading _context.CriticalSection.Enter(); + if (currentThread.TerminationRequested) + { + _context.CriticalSection.Leave(); + + return KernelResult.ThreadTerminating; + } + currentThread.SignaledObj = null; currentThread.ObjSyncResult = Result.Success; @@ -114,8 +121,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading currentThread.SignaledObj = null; currentThread.ObjSyncResult = KernelResult.TimedOut; - if (currentThread.ShallBeTerminated || - currentThread.SchedFlags == ThreadSchedState.TerminationPending) + if (currentThread.TerminationRequested) { _context.CriticalSection.Leave(); @@ -280,8 +286,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading _context.CriticalSection.Enter(); - if (currentThread.ShallBeTerminated || - currentThread.SchedFlags == ThreadSchedState.TerminationPending) + if (currentThread.TerminationRequested) { _context.CriticalSection.Leave(); @@ -351,8 +356,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading _context.CriticalSection.Enter(); - if (currentThread.ShallBeTerminated || - currentThread.SchedFlags == ThreadSchedState.TerminationPending) + if (currentThread.TerminationRequested) { _context.CriticalSection.Leave(); -- cgit v1.2.3