Index: base/synchronization/atomic_flag.h |
diff --git a/base/synchronization/cancellation_flag.h b/base/synchronization/atomic_flag.h |
similarity index 30% |
copy from base/synchronization/cancellation_flag.h |
copy to base/synchronization/atomic_flag.h |
index f2f83f47dadd651542ad3f65f8101b77a86fc8eb..c754e8729c87769098ba1c54ef6447a340555a05 100644 |
--- a/base/synchronization/cancellation_flag.h |
+++ b/base/synchronization/atomic_flag.h |
@@ -2,48 +2,41 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef BASE_SYNCHRONIZATION_CANCELLATION_FLAG_H_ |
-#define BASE_SYNCHRONIZATION_CANCELLATION_FLAG_H_ |
+#ifndef BASE_SYNCHRONIZATION_ATOMIC_FLAG_H_ |
+#define BASE_SYNCHRONIZATION_ATOMIC_FLAG_H_ |
#include "base/atomicops.h" |
#include "base/base_export.h" |
#include "base/macros.h" |
-#include "base/threading/platform_thread.h" |
+#include "base/threading/thread_checker.h" |
namespace base { |
-// CancellationFlag allows one thread to cancel jobs executed on some worker |
-// thread. Calling Set() from one thread and IsSet() from a number of threads |
-// is thread-safe. |
+// A flag that can safely be set from one thread and read from other threads. |
// |
// This class IS NOT intended for synchronization between threads. |
-class BASE_EXPORT CancellationFlag { |
+class BASE_EXPORT AtomicFlag { |
public: |
- CancellationFlag() : flag_(false) { |
-#if !defined(NDEBUG) |
- set_on_ = PlatformThread::CurrentId(); |
-#endif |
- } |
- ~CancellationFlag() {} |
- |
- // Set the flag. May only be called on the thread which owns the object. |
+ AtomicFlag(); |
+ ~AtomicFlag() = default; |
+ |
+ // Set the flag. May only be called on the thread which created the object. |
void Set(); |
- bool IsSet() const; // Returns true iff the flag was set. |
- // For subtle reasons that may be different on different architectures, |
- // a different thread testing IsSet() may erroneously read 'true' after |
- // this method has been called. |
+ // Returns true iff the flag was set. |
+ bool IsSet() const; |
+ |
+ // Resets the flag. Be careful when using this: callers might not expect |
+ // IsSet() to return false after returning true once. |
void UnsafeResetForTesting(); |
private: |
- base::subtle::Atomic32 flag_; |
-#if !defined(NDEBUG) |
- PlatformThreadId set_on_; |
-#endif |
+ base::subtle::Atomic32 flag_ = 0; |
+ ThreadChecker thread_checker_; |
- DISALLOW_COPY_AND_ASSIGN(CancellationFlag); |
+ DISALLOW_COPY_AND_ASSIGN(AtomicFlag); |
}; |
} // namespace base |
-#endif // BASE_SYNCHRONIZATION_CANCELLATION_FLAG_H_ |
+#endif // BASE_SYNCHRONIZATION_ATOMIC_FLAG_H_ |