| 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_
|
|
|