From 8f6245be9a344f53cfca6804bf883a491d113dae Mon Sep 17 00:00:00 2001
From: bunnei <bunneidev@gmail.com>
Date: Sat, 26 Nov 2022 13:46:38 -0800
Subject: [PATCH] core: Use atomic instead of a lock to protect is_paused.

- This allows us to call IsPaused() elsewhere if we are holding the suspend lock.
---
 src/core/core.cpp | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/core/core.cpp b/src/core/core.cpp
index d8934be528..94d4e22124 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -189,7 +189,7 @@ struct System::Impl {
 
         kernel.Suspend(false);
         core_timing.SyncPause(false);
-        is_paused = false;
+        is_paused.store(false, std::memory_order_relaxed);
 
         return status;
     }
@@ -200,14 +200,13 @@ struct System::Impl {
 
         core_timing.SyncPause(true);
         kernel.Suspend(true);
-        is_paused = true;
+        is_paused.store(true, std::memory_order_relaxed);
 
         return status;
     }
 
     bool IsPaused() const {
-        std::unique_lock lk(suspend_guard);
-        return is_paused;
+        return is_paused.load(std::memory_order_relaxed);
     }
 
     std::unique_lock<std::mutex> StallProcesses() {
@@ -218,7 +217,7 @@ struct System::Impl {
     }
 
     void UnstallProcesses() {
-        if (!is_paused) {
+        if (!IsPaused()) {
             core_timing.SyncPause(false);
             kernel.Suspend(false);
         }
@@ -465,7 +464,7 @@ struct System::Impl {
     }
 
     mutable std::mutex suspend_guard;
-    bool is_paused{};
+    std::atomic_bool is_paused{};
     std::atomic<bool> is_shutting_down{};
 
     Timing::CoreTiming core_timing;