summaryrefslogtreecommitdiff
path: root/absl/log
diff options
context:
space:
mode:
authorGravatar Derek Mauro <dmauro@google.com>2022-11-09 18:06:05 -0800
committerGravatar Copybara-Service <copybara-worker@google.com>2022-11-09 18:06:53 -0800
commitb4a4a6b01fde193fde1be77bcec1712e82faf6a5 (patch)
tree2da3e64d3add776172f636d9140ff801b0443679 /absl/log
parentdb8cd47898082fa47bff41fd76575630132669d3 (diff)
Replace std::atomic_flag with std::atomic<bool> to avoid the C++20
deprecation of ATOMIC_FLAG_INIT. Another option would have been to use macros to only initialize std::atomic_flag before C++20, but I decided to use one compilation path instead. The major difference between std::atomic_flag and std::atomic<bool> is that the former is guaranteed to be lock-free, but we already assume std::atomic<bool> is lock-free in many places. https://en.cppreference.com/w/cpp/atomic/atomic_flag PiperOrigin-RevId: 487397075 Change-Id: I3f1c539ec8b2ca58547282e69ed73e93243e8efe
Diffstat (limited to 'absl/log')
-rw-r--r--absl/log/internal/log_message.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/absl/log/internal/log_message.cc b/absl/log/internal/log_message.cc
index a044a5a7..20050a04 100644
--- a/absl/log/internal/log_message.cc
+++ b/absl/log/internal/log_message.cc
@@ -372,12 +372,16 @@ void LogMessage::Flush() {
}
// Have we already seen a fatal message?
- ABSL_CONST_INIT static std::atomic_flag seen_fatal = ATOMIC_FLAG_INIT;
+ ABSL_CONST_INIT static std::atomic<bool> seen_fatal(false);
if (data_->entry.log_severity() == absl::LogSeverity::kFatal &&
absl::log_internal::ExitOnDFatal()) {
// Exactly one LOG(FATAL) message is responsible for aborting the process,
// even if multiple threads LOG(FATAL) concurrently.
- data_->first_fatal = !seen_fatal.test_and_set(std::memory_order_relaxed);
+ bool expected_seen_fatal = false;
+ if (seen_fatal.compare_exchange_strong(expected_seen_fatal, true,
+ std::memory_order_relaxed)) {
+ data_->first_fatal = true;
+ }
}
data_->entry.text_message_with_prefix_and_newline_and_nul_ =