Index: base/synchronization/atomic_flag.cc |
diff --git a/base/synchronization/atomic_flag.cc b/base/synchronization/atomic_flag.cc |
index 98d90cb88fd6c039842eb6ac5ccd6bd6017abf9f..32405fd00a6f1a225ff5a43ed8d087de86066557 100644 |
--- a/base/synchronization/atomic_flag.cc |
+++ b/base/synchronization/atomic_flag.cc |
@@ -8,10 +8,16 @@ |
namespace base { |
-AtomicFlag::AtomicFlag() = default; |
+AtomicFlag::AtomicFlag() { |
+ // It doesn't matter where the AtomicFlag is built so long as it's always |
+ // Set() from the same sequence after. Note: the sequencing requirements are |
+ // necessary for IsSet()'s callers to know which sequence's memory operations |
+ // they are synchronized with. |
+ set_sequence_checker_.DetachFromSequence(); |
+} |
void AtomicFlag::Set() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(set_sequence_checker_.CalledOnValidSequencedThread()); |
base::subtle::Release_Store(&flag_, 1); |
} |
@@ -19,8 +25,9 @@ bool AtomicFlag::IsSet() const { |
return base::subtle::Acquire_Load(&flag_) != 0; |
} |
-void AtomicFlag::UnsafeResetForTesting() { |
+void AtomicFlag::UnsafeReset() { |
base::subtle::Release_Store(&flag_, 0); |
+ set_sequence_checker_.DetachFromSequence(); |
} |
} // namespace base |