summaryrefslogtreecommitdiff
path: root/chromium/components/scheduler/base/task_queue_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/scheduler/base/task_queue_manager.cc')
-rw-r--r--chromium/components/scheduler/base/task_queue_manager.cc19
1 files changed, 11 insertions, 8 deletions
diff --git a/chromium/components/scheduler/base/task_queue_manager.cc b/chromium/components/scheduler/base/task_queue_manager.cc
index fda6e7ed6bf..b053e4be073 100644
--- a/chromium/components/scheduler/base/task_queue_manager.cc
+++ b/chromium/components/scheduler/base/task_queue_manager.cc
@@ -146,10 +146,20 @@ void TaskQueueManager::RegisterAsUpdatableTaskQueue(
void TaskQueueManager::UnregisterAsUpdatableTaskQueue(
internal::TaskQueueImpl* queue) {
DCHECK(main_thread_checker_.CalledOnValidThread());
+ MoveNewlyUpdatableQueuesIntoUpdatableQueueSet();
+#ifndef NDEBUG
+ {
+ base::AutoLock lock(newly_updatable_lock_);
+ DCHECK(!(updatable_queue_set_.find(queue) == updatable_queue_set_.end() &&
+ std::find(newly_updatable_.begin(), newly_updatable_.end(),
+ queue) != newly_updatable_.end()));
+ }
+#endif
updatable_queue_set_.erase(queue);
}
void TaskQueueManager::MoveNewlyUpdatableQueuesIntoUpdatableQueueSet() {
+ DCHECK(main_thread_checker_.CalledOnValidThread());
base::AutoLock lock(newly_updatable_lock_);
while (!newly_updatable_.empty()) {
updatable_queue_set_.insert(newly_updatable_.back());
@@ -168,14 +178,7 @@ void TaskQueueManager::UpdateWorkQueues(
// Move any ready delayed tasks into the incomming queues.
WakeupReadyDelayedQueues(&lazy_now);
- // Insert any newly updatable queues into the updatable_queue_set_.
- {
- base::AutoLock lock(newly_updatable_lock_);
- while (!newly_updatable_.empty()) {
- updatable_queue_set_.insert(newly_updatable_.back());
- newly_updatable_.pop_back();
- }
- }
+ MoveNewlyUpdatableQueuesIntoUpdatableQueueSet();
auto iter = updatable_queue_set_.begin();
while (iter != updatable_queue_set_.end()) {