Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(680)

Side by Side Diff: components/scheduler/base/task_queue_impl.cc

Issue 1685093002: Fix bug with TaskQueueSelector and blocked queues (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix UAF Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | components/scheduler/base/task_queue_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/scheduler/base/task_queue_impl.h" 5 #include "components/scheduler/base/task_queue_impl.h"
6 6
7 #include "components/scheduler/base/task_queue_manager.h" 7 #include "components/scheduler/base/task_queue_manager.h"
8 #include "components/scheduler/base/task_queue_manager_delegate.h" 8 #include "components/scheduler/base/task_queue_manager_delegate.h"
9 #include "components/scheduler/base/time_domain.h" 9 #include "components/scheduler/base/time_domain.h"
10 #include "components/scheduler/base/work_queue.h" 10 #include "components/scheduler/base/work_queue.h"
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 if (!any_thread().task_queue_manager) 120 if (!any_thread().task_queue_manager)
121 return; 121 return;
122 any_thread().time_domain = nullptr; 122 any_thread().time_domain = nullptr;
123 main_thread_only().time_domain = nullptr; 123 main_thread_only().time_domain = nullptr;
124 any_thread().task_queue_manager->UnregisterTaskQueue(this); 124 any_thread().task_queue_manager->UnregisterTaskQueue(this);
125 125
126 any_thread().task_queue_manager = nullptr; 126 any_thread().task_queue_manager = nullptr;
127 main_thread_only().task_queue_manager = nullptr; 127 main_thread_only().task_queue_manager = nullptr;
128 main_thread_only().delayed_incoming_queue = std::priority_queue<Task>(); 128 main_thread_only().delayed_incoming_queue = std::priority_queue<Task>();
129 any_thread().immediate_incoming_queue = std::queue<Task>(); 129 any_thread().immediate_incoming_queue = std::queue<Task>();
130 main_thread_only().immediate_work_queue->Clear(); 130 main_thread_only().immediate_work_queue.reset();
131 main_thread_only().delayed_work_queue->Clear(); 131 main_thread_only().delayed_work_queue.reset();
132 } 132 }
133 133
134 bool TaskQueueImpl::RunsTasksOnCurrentThread() const { 134 bool TaskQueueImpl::RunsTasksOnCurrentThread() const {
135 base::AutoLock lock(any_thread_lock_); 135 base::AutoLock lock(any_thread_lock_);
136 return base::PlatformThread::CurrentId() == thread_id_; 136 return base::PlatformThread::CurrentId() == thread_id_;
137 } 137 }
138 138
139 bool TaskQueueImpl::PostDelayedTask(const tracked_objects::Location& from_here, 139 bool TaskQueueImpl::PostDelayedTask(const tracked_objects::Location& from_here,
140 const base::Closure& task, 140 const base::Closure& task,
141 base::TimeDelta delay) { 141 base::TimeDelta delay) {
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 void TaskQueueImpl::PumpQueue(bool may_post_dowork) { 481 void TaskQueueImpl::PumpQueue(bool may_post_dowork) {
482 base::AutoLock lock(any_thread_lock_); 482 base::AutoLock lock(any_thread_lock_);
483 PumpQueueLocked(may_post_dowork); 483 PumpQueueLocked(may_post_dowork);
484 } 484 }
485 485
486 const char* TaskQueueImpl::GetName() const { 486 const char* TaskQueueImpl::GetName() const {
487 return name_; 487 return name_;
488 } 488 }
489 489
490 void TaskQueueImpl::SetQueuePriority(QueuePriority priority) { 490 void TaskQueueImpl::SetQueuePriority(QueuePriority priority) {
491 if (!main_thread_only().task_queue_manager) 491 if (!main_thread_only().task_queue_manager || priority == GetQueuePriority())
492 return; 492 return;
493 main_thread_only().task_queue_manager->selector_.SetQueuePriority(this, 493 main_thread_only().task_queue_manager->selector_.SetQueuePriority(this,
494 priority); 494 priority);
495 } 495 }
496 496
497 TaskQueueImpl::QueuePriority TaskQueueImpl::GetQueuePriority() const { 497 TaskQueueImpl::QueuePriority TaskQueueImpl::GetQueuePriority() const {
498 size_t set_index = immediate_work_queue()->work_queue_set_index(); 498 size_t set_index = immediate_work_queue()->work_queue_set_index();
499 DCHECK_EQ(set_index, delayed_work_queue()->work_queue_set_index()); 499 DCHECK_EQ(set_index, delayed_work_queue()->work_queue_set_index());
500 return static_cast<TaskQueue::QueuePriority>(set_index); 500 return static_cast<TaskQueue::QueuePriority>(set_index);
501 } 501 }
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 state->SetBoolean("nestable", task.nestable); 673 state->SetBoolean("nestable", task.nestable);
674 state->SetBoolean("is_high_res", task.is_high_res); 674 state->SetBoolean("is_high_res", task.is_high_res);
675 state->SetDouble( 675 state->SetDouble(
676 "delayed_run_time", 676 "delayed_run_time",
677 (task.delayed_run_time - base::TimeTicks()).InMicroseconds() / 1000.0L); 677 (task.delayed_run_time - base::TimeTicks()).InMicroseconds() / 1000.0L);
678 state->EndDictionary(); 678 state->EndDictionary();
679 } 679 }
680 680
681 } // namespace internal 681 } // namespace internal
682 } // namespace scheduler 682 } // namespace scheduler
OLDNEW
« no previous file with comments | « no previous file | components/scheduler/base/task_queue_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698