aboutsummaryrefslogtreecommitdiff
path: root/src/cancelable-task.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cancelable-task.cc')
-rw-r--r--src/cancelable-task.cc27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/cancelable-task.cc b/src/cancelable-task.cc
index ea351f89..b0387f4d 100644
--- a/src/cancelable-task.cc
+++ b/src/cancelable-task.cc
@@ -93,13 +93,36 @@ void CancelableTaskManager::CancelAndWait() {
}
}
+CancelableTaskManager::TryAbortResult CancelableTaskManager::TryAbortAll() {
+ // Clean up all cancelable fore- and background tasks. Tasks are canceled on
+ // the way if possible, i.e., if they have not started yet.
+ base::LockGuard<base::Mutex> guard(&mutex_);
+
+ if (cancelable_tasks_.empty()) return kTaskRemoved;
+
+ for (auto it = cancelable_tasks_.begin(); it != cancelable_tasks_.end();) {
+ if (it->second->Cancel()) {
+ it = cancelable_tasks_.erase(it);
+ } else {
+ ++it;
+ }
+ }
+
+ return cancelable_tasks_.empty() ? kTaskAborted : kTaskRunning;
+}
CancelableTask::CancelableTask(Isolate* isolate)
- : Cancelable(isolate->cancelable_task_manager()), isolate_(isolate) {}
+ : CancelableTask(isolate, isolate->cancelable_task_manager()) {}
+CancelableTask::CancelableTask(Isolate* isolate, CancelableTaskManager* manager)
+ : Cancelable(manager), isolate_(isolate) {}
CancelableIdleTask::CancelableIdleTask(Isolate* isolate)
- : Cancelable(isolate->cancelable_task_manager()), isolate_(isolate) {}
+ : CancelableIdleTask(isolate, isolate->cancelable_task_manager()) {}
+
+CancelableIdleTask::CancelableIdleTask(Isolate* isolate,
+ CancelableTaskManager* manager)
+ : Cancelable(manager), isolate_(isolate) {}
} // namespace internal
} // namespace v8