From e9b3146a0e603bf3b5d57172dce751f229b88db3 Mon Sep 17 00:00:00 2001 From: nerix Date: Sun, 25 May 2025 16:24:44 +0200 Subject: [PATCH] fix(once-flag): make `flag` atomic (#6237) --- CHANGELOG.md | 1 + src/util/OnceFlag.cpp | 7 +++---- src/util/OnceFlag.hpp | 3 +-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3eba72da..4ed73aaa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,6 +53,7 @@ - Dev: Fixed incorrect lua generation of static methods for typescript plugins. (#6190, #6223) - Dev: Merged top/bottom and left/right notebook layouts. (#6215) - Dev: Refactored `Button` and friends. (#6102) +- Dev: `OnceFlag`'s internal flag is now atomic. (#6237) - Dev: Bumped clang-format requirement to 19. (#6236) ## 2.5.3 diff --git a/src/util/OnceFlag.cpp b/src/util/OnceFlag.cpp index cb42ea5a..8ec2f951 100644 --- a/src/util/OnceFlag.cpp +++ b/src/util/OnceFlag.cpp @@ -3,13 +3,12 @@ namespace chatterino { OnceFlag::OnceFlag() = default; -OnceFlag::~OnceFlag() = default; void OnceFlag::set() { { std::unique_lock guard(this->mutex); - this->flag = true; + this->flag.store(true, std::memory_order::relaxed); } this->condvar.notify_all(); } @@ -18,7 +17,7 @@ bool OnceFlag::waitFor(std::chrono::milliseconds ms) { std::unique_lock lock(this->mutex); return this->condvar.wait_for(lock, ms, [this] { - return this->flag; + return this->flag.load(std::memory_order::relaxed); }); } @@ -26,7 +25,7 @@ void OnceFlag::wait() { std::unique_lock lock(this->mutex); this->condvar.wait(lock, [this] { - return this->flag; + return this->flag.load(std::memory_order::relaxed); }); } diff --git a/src/util/OnceFlag.hpp b/src/util/OnceFlag.hpp index 4060dff2..7d5aeb9f 100644 --- a/src/util/OnceFlag.hpp +++ b/src/util/OnceFlag.hpp @@ -14,7 +14,6 @@ class OnceFlag { public: OnceFlag(); - ~OnceFlag(); /// Set this flag and notify waiters void set(); @@ -35,7 +34,7 @@ public: private: std::mutex mutex; std::condition_variable condvar; - bool flag = false; + std::atomic flag = false; }; } // namespace chatterino