| Index: base/run_loop.h
|
| diff --git a/base/run_loop.h b/base/run_loop.h
|
| index c6471273fd2378f6366ef544ef64cbfe4f777c13..9c32337cd332c4994ed1d9512aa58225943acd48 100644
|
| --- a/base/run_loop.h
|
| +++ b/base/run_loop.h
|
| @@ -13,6 +13,7 @@
|
| #include "base/macros.h"
|
| #include "base/memory/weak_ptr.h"
|
| #include "base/observer_list.h"
|
| +#include "base/sequence_checker.h"
|
| #include "base/threading/thread_checker.h"
|
| #include "build/build_config.h"
|
|
|
| @@ -51,8 +52,7 @@ class BASE_EXPORT RunLoop {
|
| void RunUntilIdle();
|
|
|
| bool running() const {
|
| - // TODO(gab): Fix bad usage and enable this check, http://crbug.com/715235.
|
| - // DCHECK(thread_checker_.CalledOnValidThread());
|
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
| return running_;
|
| }
|
|
|
| @@ -175,6 +175,7 @@ class BASE_EXPORT RunLoop {
|
| // RegisterDelegateForCurrentThread().
|
| bool bound_ = false;
|
|
|
| + // Thread-affine per its use of TLS.
|
| THREAD_CHECKER(bound_thread_checker_);
|
|
|
| Client client_interface_ = Client(this);
|
| @@ -208,8 +209,9 @@ class BASE_EXPORT RunLoop {
|
| bool BeforeRun();
|
| void AfterRun();
|
|
|
| - // A copy of RunLoop::Delegate for this thread for quick access without using
|
| - // TLS.
|
| + // A copy of RunLoop::Delegate for the thread driven by tis RunLoop for quick
|
| + // access without using TLS (also allows access to state from another sequence
|
| + // during Run(), ref. |sequence_checker_| below).
|
| Delegate* delegate_;
|
|
|
| bool run_called_ = false;
|
| @@ -220,9 +222,11 @@ class BASE_EXPORT RunLoop {
|
| // that we should quit Run once it becomes idle.
|
| bool quit_when_idle_received_ = false;
|
|
|
| - // RunLoop's non-static methods are affine to the thread it's running on per
|
| - // this class' underlying use of thread-local-storage.
|
| - base::ThreadChecker thread_checker_;
|
| + // RunLoop is not thread-safe. Its state may not be accessed from any other
|
| + // sequence than the thread it was constructed on. Exception: RunLoop can be
|
| + // safely accessed from one other sequence (or single parallel task) during
|
| + // Run().
|
| + SEQUENCE_CHECKER(sequence_checker_);
|
|
|
| // WeakPtrFactory for QuitClosure safety.
|
| base::WeakPtrFactory<RunLoop> weak_factory_;
|
|
|