diff options
author | vandebo@chromium.org <vandebo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-20 11:51:28 +0000 |
---|---|---|
committer | vandebo@chromium.org <vandebo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-20 11:51:28 +0000 |
commit | 87738f7d5cdb54e524520144f28baa78e38098e2 (patch) | |
tree | 3c1db8b038a88450c85a4703b5f399ad9e23f942 /base/sequence_checker_impl.cc | |
parent | a077da7b45007de882a8d843ad084ff2eba14c2f (diff) | |
download | chromium_src-87738f7d5cdb54e524520144f28baa78e38098e2.zip chromium_src-87738f7d5cdb54e524520144f28baa78e38098e2.tar.gz chromium_src-87738f7d5cdb54e524520144f28baa78e38098e2.tar.bz2 |
Revert 211956 "base: Change WeakPtr to use SequenceChecker inste..."
As well as revert 212725 "base: Make SequenceChecker death tests multi-threads work correctly."
See http://crbug.com/261448
> base: Change WeakPtr to use SequenceChecker instead of ThreadChecker.
>
> This will enable WeakPtr to be used in SequencedWorkerPool, et al. with a sequence token.
>
> This is a continuation of issue: https://chromiumcodereview.appspot.com/18231002/
>
> The original issue got messed up by a rietveld bug, so refer there for history and comments.
>
> BUG=165590
>
> Review URL: https://chromiumcodereview.appspot.com/18501008
TBR=tommycli@chromium.org
Review URL: https://chromiumcodereview.appspot.com/19695005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@212780 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/sequence_checker_impl.cc')
-rw-r--r-- | base/sequence_checker_impl.cc | 39 |
1 files changed, 12 insertions, 27 deletions
diff --git a/base/sequence_checker_impl.cc b/base/sequence_checker_impl.cc index e95b8ee..24d9ed9 100644 --- a/base/sequence_checker_impl.cc +++ b/base/sequence_checker_impl.cc @@ -4,43 +4,28 @@ #include "base/sequence_checker_impl.h" +#include "base/sequenced_task_runner.h" + namespace base { -SequenceCheckerImpl::SequenceCheckerImpl() - : sequence_token_assigned_(false) { - AutoLock auto_lock(lock_); - EnsureSequenceTokenAssigned(); -} +SequenceCheckerImpl::SequenceCheckerImpl( + const scoped_refptr<SequencedTaskRunner>& sequenced_task_runner) + : sequenced_task_runner_(sequenced_task_runner) {} SequenceCheckerImpl::~SequenceCheckerImpl() {} -bool SequenceCheckerImpl::CalledOnValidSequencedThread() const { +bool SequenceCheckerImpl::CalledOnValidSequence() const { AutoLock auto_lock(lock_); - EnsureSequenceTokenAssigned(); - - // If this thread is not associated with a SequencedWorkerPool, - // SequenceChecker behaves as a ThreadChecker. See header for details. - if (!sequence_token_.IsValid()) - return thread_checker_.CalledOnValidThread(); - - return sequence_token_.Equals( - SequencedWorkerPool::GetSequenceTokenForCurrentThread()); + return sequenced_task_runner_.get() ? + sequenced_task_runner_->RunsTasksOnCurrentThread() : + thread_checker_.CalledOnValidThread(); } -void SequenceCheckerImpl::DetachFromSequence() { +void SequenceCheckerImpl::ChangeSequence( + const scoped_refptr<SequencedTaskRunner>& sequenced_task_runner) { AutoLock auto_lock(lock_); + sequenced_task_runner_ = sequenced_task_runner; thread_checker_.DetachFromThread(); - sequence_token_assigned_ = false; - sequence_token_ = SequencedWorkerPool::SequenceToken(); -} - -void SequenceCheckerImpl::EnsureSequenceTokenAssigned() const { - lock_.AssertAcquired(); - if (sequence_token_assigned_) - return; - - sequence_token_assigned_ = true; - sequence_token_ = SequencedWorkerPool::GetSequenceTokenForCurrentThread(); } } // namespace base |