Chromium Code Reviews| Index: base/task_scheduler/scheduler_worker_thread.cc |
| diff --git a/base/task_scheduler/scheduler_worker_thread.cc b/base/task_scheduler/scheduler_worker_thread.cc |
| index 49dde51d6a7b036675fd47d645df60e0c0e4e242..6fcce57594a471484d9e2c1af8ae65c00c72ed26 100644 |
| --- a/base/task_scheduler/scheduler_worker_thread.cc |
| +++ b/base/task_scheduler/scheduler_worker_thread.cc |
| @@ -74,7 +74,15 @@ void SchedulerWorkerThread::ThreadMain() { |
| } |
| task_tracker_->RunTask(sequence->PeekTask()); |
| - delegate_->RanTaskFromSequence(std::move(sequence)); |
| + |
| + const bool sequence_became_empty = sequence->PopTask(); |
| + |
| + // If |sequence| isn't empty immediately after the pop, enqueue it to |
| + // maintain the invariant that a non-empty Sequence is always referenced by |
| + // either a PriorityQueue or a SchedulerWorkerThread. If it is empty, it |
| + // will be enqueued when a Task is added to it. |
|
robliao
2016/04/08 17:21:39
Nit: Technically, for the empty case...
If it is e
fdoray
2016/04/08 17:49:12
Done.
|
| + if (!sequence_became_empty) |
| + delegate_->EnqueueSequence(std::move(sequence)); |
| // Calling WakeUp() guarantees that this SchedulerWorkerThread will run |
| // Tasks from Sequences returned by the GetWork() method of |delegate_| |