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

Unified Diff: chrome/browser/sync_file_system/drive_backend/task_dependency_manager.cc

Issue 212203003: [SyncFS] Add exclusive task support for TaskDependencyManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync_file_system/drive_backend/task_dependency_manager.cc
diff --git a/chrome/browser/sync_file_system/drive_backend/task_dependency_manager.cc b/chrome/browser/sync_file_system/drive_backend/task_dependency_manager.cc
index cf2e51c0b24f46ebfcb161bfeb22d2c0c6abc02d..429d2179cf92ea1d611ba13ff6a99c41716f0634 100644
--- a/chrome/browser/sync_file_system/drive_backend/task_dependency_manager.cc
+++ b/chrome/browser/sync_file_system/drive_backend/task_dependency_manager.cc
@@ -59,10 +59,11 @@ bool InsertPaths(std::vector<base::FilePath> paths_to_insert,
} // namespace
-BlockingFactor::BlockingFactor() {}
+BlockingFactor::BlockingFactor() : exclusive(false) {}
BlockingFactor::~BlockingFactor() {}
-TaskDependencyManager::TaskDependencyManager() {}
+TaskDependencyManager::TaskDependencyManager()
+ : running_exclusive_task_(false) {}
TaskDependencyManager::~TaskDependencyManager() {
DCHECK(paths_by_app_id_.empty());
@@ -71,6 +72,18 @@ TaskDependencyManager::~TaskDependencyManager() {
}
bool TaskDependencyManager::Insert(const BlockingFactor& blocking_factor) {
+ if (running_exclusive_task_)
+ return false;
+
+ if (blocking_factor.exclusive) {
+ if (!tracker_ids_.empty() ||
+ !file_ids_.empty() ||
+ !paths_by_app_id_.empty())
+ return false;
+ running_exclusive_task_ = true;
+ return true;
+ }
+
if (!InsertAllOrNone(blocking_factor.tracker_ids, &tracker_ids_))
goto fail_on_tracker_id_insertion;
@@ -97,6 +110,16 @@ bool TaskDependencyManager::Insert(const BlockingFactor& blocking_factor) {
}
void TaskDependencyManager::Erase(const BlockingFactor& blocking_factor) {
+ if (blocking_factor.exclusive) {
+ DCHECK(running_exclusive_task_);
+ DCHECK(paths_by_app_id_.empty());
+ DCHECK(file_ids_.empty());
+ DCHECK(tracker_ids_.empty());
+
+ running_exclusive_task_ = false;
+ return;
+ }
+
if (!blocking_factor.app_id.empty()) {
EraseContainer(blocking_factor.paths,
&paths_by_app_id_[blocking_factor.app_id]);

Powered by Google App Engine
This is Rietveld 408576698