Fixed a data race quic_alarm.cc.
Tested with 10K runs:
http://sponge2/b5abb08b-b006-465b-943b-f7fc477c5aed
(The test failure is from a different reason)
PiperOrigin-RevId: 394799609
diff --git a/quic/core/quic_alarm.cc b/quic/core/quic_alarm.cc
index 67e0a74..22e2e67 100644
--- a/quic/core/quic_alarm.cc
+++ b/quic/core/quic_alarm.cc
@@ -4,6 +4,8 @@
#include "quic/core/quic_alarm.h"
+#include <atomic>
+
#include "quic/platform/api/quic_bug_tracker.h"
#include "quic/platform/api/quic_flag_utils.h"
#include "quic/platform/api/quic_flags.h"
@@ -17,9 +19,9 @@
QuicAlarm::~QuicAlarm() {
if (GetQuicRestartFlag(quic_alarm_add_permanent_cancel) && IsSet()) {
QUIC_CODE_COUNT(quic_alarm_not_cancelled_in_dtor);
- static uint64_t hit_count = 0;
- ++hit_count;
- if ((hit_count & (hit_count - 1)) == 0) {
+ static std::atomic<uint64_t> hit_count{0};
+ uint64_t old_count = hit_count.fetch_add(1, std::memory_order_relaxed);
+ if ((old_count & (old_count + 1)) == 0) {
QUIC_LOG(ERROR) << "QuicAlarm not cancelled at destruction. "
<< QuicStackTrace();
}