diff options
author | dewittj@chromium.org <dewittj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-26 17:10:02 +0000 |
---|---|---|
committer | dewittj@chromium.org <dewittj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-26 17:10:02 +0000 |
commit | 8e76597313bef9434cc349dd4faf81fb026a6a91 (patch) | |
tree | e40c82451a872fe49ba66a72c6a3ebaa8e3e1f81 /base/sequence_checker_impl.cc | |
parent | a4f3e2e5520ccb811a4fa8fd64f95fe0939af3d3 (diff) | |
download | chromium_src-8e76597313bef9434cc349dd4faf81fb026a6a91.zip chromium_src-8e76597313bef9434cc349dd4faf81fb026a6a91.tar.gz chromium_src-8e76597313bef9434cc349dd4faf81fb026a6a91.tar.bz2 |
Revert 213906 "base: Re-apply WeakPtr support for SequencedWorke..."
Speculative due to base_unittests failures.
> base: Re-apply WeakPtr support for SequencedWorkerPools, fixing deadlock
>
> This reverts the revert found here: https://codereview.chromium.org/19882002
>
> It also fixes the deadlock that caused the revert, reported here:
> http://crbug.com/261448
>
> Patchset 1 is simply what was originally committed (and reverted). Subsequent patchsets show the fix of the deadlock problem.
>
> BUG=165590
> TBR=darin
>
> Review URL: https://chromiumcodereview.appspot.com/20163004
TBR=tommycli@chromium.org
Review URL: https://codereview.chromium.org/20771002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@213943 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 |