diff options
Diffstat (limited to 'deps/v8/src/cancelable-task.cc')
-rw-r--r-- | deps/v8/src/cancelable-task.cc | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/deps/v8/src/cancelable-task.cc b/deps/v8/src/cancelable-task.cc index ea351f8908..b0387f4dc0 100644 --- a/deps/v8/src/cancelable-task.cc +++ b/deps/v8/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 |