summaryrefslogtreecommitdiffstats
path: root/base/sequence_checker_impl.cc
diff options
context:
space:
mode:
authordewittj@chromium.org <dewittj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-26 17:10:02 +0000
committerdewittj@chromium.org <dewittj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-26 17:10:02 +0000
commit8e76597313bef9434cc349dd4faf81fb026a6a91 (patch)
treee40c82451a872fe49ba66a72c6a3ebaa8e3e1f81 /base/sequence_checker_impl.cc
parenta4f3e2e5520ccb811a4fa8fd64f95fe0939af3d3 (diff)
downloadchromium_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.cc39
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