summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlat9nq <lat9nq@gmail.com>2022-04-02 00:57:40 +0200
committerlat9nq <lat9nq@gmail.com>2022-04-04 03:47:58 +0200
commit6bcbbb29e7822f5ebd6ac985066dfdd0890492f0 (patch)
treed903d0ab561c399600819b81e0b5823044ad7922
parentk_process: Fix data race (diff)
downloadyuzu-6bcbbb29e7822f5ebd6ac985066dfdd0890492f0.tar
yuzu-6bcbbb29e7822f5ebd6ac985066dfdd0890492f0.tar.gz
yuzu-6bcbbb29e7822f5ebd6ac985066dfdd0890492f0.tar.bz2
yuzu-6bcbbb29e7822f5ebd6ac985066dfdd0890492f0.tar.lz
yuzu-6bcbbb29e7822f5ebd6ac985066dfdd0890492f0.tar.xz
yuzu-6bcbbb29e7822f5ebd6ac985066dfdd0890492f0.tar.zst
yuzu-6bcbbb29e7822f5ebd6ac985066dfdd0890492f0.zip
-rw-r--r--src/core/hle/kernel/k_thread.cpp4
-rw-r--r--src/core/hle/kernel/k_thread.h3
2 files changed, 4 insertions, 3 deletions
diff --git a/src/core/hle/kernel/k_thread.cpp b/src/core/hle/kernel/k_thread.cpp
index 94c8faf68..d3bb1c871 100644
--- a/src/core/hle/kernel/k_thread.cpp
+++ b/src/core/hle/kernel/k_thread.cpp
@@ -723,7 +723,7 @@ void KThread::UpdateState() {
ASSERT(kernel.GlobalSchedulerContext().IsLocked());
// Set our suspend flags in state.
- const auto old_state = thread_state;
+ const ThreadState old_state = thread_state;
const auto new_state =
static_cast<ThreadState>(this->GetSuspendFlags()) | (old_state & ThreadState::Mask);
thread_state = new_state;
@@ -738,7 +738,7 @@ void KThread::Continue() {
ASSERT(kernel.GlobalSchedulerContext().IsLocked());
// Clear our suspend flags in state.
- const auto old_state = thread_state;
+ const ThreadState old_state = thread_state;
thread_state = old_state & ThreadState::Mask;
// Note the state change in scheduler.
diff --git a/src/core/hle/kernel/k_thread.h b/src/core/hle/kernel/k_thread.h
index f46db7298..d0fd85130 100644
--- a/src/core/hle/kernel/k_thread.h
+++ b/src/core/hle/kernel/k_thread.h
@@ -5,6 +5,7 @@
#pragma once
#include <array>
+#include <atomic>
#include <span>
#include <string>
#include <utility>
@@ -751,7 +752,7 @@ private:
KAffinityMask original_physical_affinity_mask{};
s32 original_physical_ideal_core_id{};
s32 num_core_migration_disables{};
- ThreadState thread_state{};
+ std::atomic<ThreadState> thread_state{};
std::atomic<bool> termination_requested{};
bool wait_cancelled{};
bool cancellable{};