Chromium Code Reviews| Index: base/threading/sequenced_task_runner_handle.cc |
| diff --git a/base/threading/sequenced_task_runner_handle.cc b/base/threading/sequenced_task_runner_handle.cc |
| index 88b36a8d648694cf892816389dc49ff2e15454c0..4e0c7a64d5594603538cf42b4112c87720bdeb02 100644 |
| --- a/base/threading/sequenced_task_runner_handle.cc |
| +++ b/base/threading/sequenced_task_runner_handle.cc |
| @@ -28,16 +28,20 @@ scoped_refptr<SequencedTaskRunner> SequencedTaskRunnerHandle::Get() { |
| if (handle) { |
| // Various modes of setting SequencedTaskRunnerHandle don't combine. |
| DCHECK(!base::ThreadTaskRunnerHandle::IsSet()); |
| - DCHECK(!SequencedWorkerPool::GetSequencedTaskRunnerForCurrentThread()); |
| + DCHECK(!SequencedWorkerPool::GetSequenceTokenForCurrentThread().IsValid()); |
| return handle->task_runner_; |
| } |
| - // Return the SequencedTaskRunner obtained from SequencedWorkerPool, if any. |
| - scoped_refptr<base::SequencedTaskRunner> task_runner = |
| - SequencedWorkerPool::GetSequencedTaskRunnerForCurrentThread(); |
| - if (task_runner) { |
| - DCHECK(!base::ThreadTaskRunnerHandle::IsSet()); |
| - return task_runner; |
| + // If we are on a worker thread for a SequencedBlockingPool that is running a |
| + // sequenced task, return a SequencedTaskRunner for it. |
| + scoped_refptr<base::SequencedWorkerPool> pool = |
| + SequencedWorkerPool::GetWorkerPoolForCurrentThread(); |
| + if (pool) { |
| + SequencedWorkerPool::SequenceToken sequence_token = |
| + SequencedWorkerPool::GetSequenceTokenForCurrentThread(); |
| + DCHECK(sequence_token.IsValid()); |
| + DCHECK(pool->IsRunningSequenceOnCurrentThread(sequence_token)); |
| + return pool->GetSequencedTaskRunner(sequence_token); |
| } |
| // Return the SingleThreadTaskRunner for the current thread otherwise. |
| @@ -47,7 +51,8 @@ scoped_refptr<SequencedTaskRunner> SequencedTaskRunnerHandle::Get() { |
| // static |
| bool SequencedTaskRunnerHandle::IsSet() { |
| return lazy_tls_ptr.Pointer()->Get() || |
| - SequencedWorkerPool::GetWorkerPoolForCurrentThread() || |
| + (SequencedWorkerPool::GetWorkerPoolForCurrentThread() && |
|
danakj
2016/07/27 21:22:52
doesnt a valid token imply there's a worker pool?
gab
2016/07/28 14:13:30
Ah indeed :-), the reverted code was over-specific
|
| + SequencedWorkerPool::GetSequenceTokenForCurrentThread().IsValid()) || |
| base::ThreadTaskRunnerHandle::IsSet(); |
| } |