aboutsummaryrefslogtreecommitdiff
path: root/third_party/abseil-cpp/absl/status/status_payload_printer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/abseil-cpp/absl/status/status_payload_printer.cc')
-rw-r--r--third_party/abseil-cpp/absl/status/status_payload_printer.cc15
1 files changed, 10 insertions, 5 deletions
diff --git a/third_party/abseil-cpp/absl/status/status_payload_printer.cc b/third_party/abseil-cpp/absl/status/status_payload_printer.cc
index a47aea11c2..ad96d76acf 100644
--- a/third_party/abseil-cpp/absl/status/status_payload_printer.cc
+++ b/third_party/abseil-cpp/absl/status/status_payload_printer.cc
@@ -16,21 +16,26 @@
#include <atomic>
#include "absl/base/attributes.h"
-#include "absl/base/internal/atomic_hook.h"
namespace absl {
ABSL_NAMESPACE_BEGIN
namespace status_internal {
-ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
-static absl::base_internal::AtomicHook<StatusPayloadPrinter> storage;
+namespace {
+// Tried constant initialized global variable but it doesn't work with Lexan
+// (MSVC's `std::atomic` has trouble constant initializing).
+std::atomic<StatusPayloadPrinter>& GetStatusPayloadPrinterStorage() {
+ ABSL_CONST_INIT static std::atomic<StatusPayloadPrinter> instance{nullptr};
+ return instance;
+}
+} // namespace
void SetStatusPayloadPrinter(StatusPayloadPrinter printer) {
- storage.Store(printer);
+ GetStatusPayloadPrinterStorage().store(printer, std::memory_order_relaxed);
}
StatusPayloadPrinter GetStatusPayloadPrinter() {
- return storage.Load();
+ return GetStatusPayloadPrinterStorage().load(std::memory_order_relaxed);
}
} // namespace status_internal