Fix tsan warning about ExecutionCoverage::SetTracing()
See: https://github.com/google/fuzztest/issues/1965
PiperOrigin-RevId: 862829024
diff --git a/fuzztest/internal/coverage.h b/fuzztest/internal/coverage.h
index 8948d52..e908da8 100644
--- a/fuzztest/internal/coverage.h
+++ b/fuzztest/internal/coverage.h
@@ -28,6 +28,7 @@
#define FUZZTEST_FUZZTEST_INTERNAL_COVERAGE_H_
#include <algorithm>
+#include <atomic>
#include <cstddef>
#include <cstdint>
#include <cstring>
@@ -135,11 +136,13 @@
// Flag marking if the control flow is currently in target codes.
// We don't want to collect unrelated updates to cmp score and dictionary.
- bool IsTracing() { return is_tracing_; }
+ bool IsTracing() { return is_tracing_.load(std::memory_order_relaxed); }
// Right before target run, call this method with true; right after
// target run, call this method with false.
- void SetIsTracing(bool is_tracing) { is_tracing_ = is_tracing; }
+ void SetIsTracing(bool is_tracing) {
+ is_tracing_.store(is_tracing, std::memory_order_relaxed);
+ }
// Update the PC->max stack usage map for `PC`.
// It compares the current stack frame against the stack frame specified in
@@ -190,7 +193,7 @@
std::atomic<bool> new_coverage_{false};
TablesOfRecentCompares tables_of_recent_compares_ = {};
- bool is_tracing_ = false;
+ std::atomic<bool> is_tracing_{false};
};
// Set the singleton ExecutionCoverage object.