Index: chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk.cc |
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk.cc |
index 1199a1348f6bce9c90771c5998b3273d0031a718..51899b8d7d2f0bb04915a57c7278a015054c1f3d 100644 |
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk.cc |
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk.cc |
@@ -144,7 +144,7 @@ std::string GenerateDemotedDirtyIDKey(int64 tracker_id) { |
return kDemotedDirtyIDKeyPrefix + base::Int64ToString(tracker_id); |
} |
-void RemoveUnreachableItems(LevelDBWrapper* db) { |
+void RemoveUnreachableItems(LevelDBWrapper* db, int64 sync_root_tracker_id) { |
DCHECK(db); |
typedef std::map<int64, std::set<int64> > ChildTrackersByParent; |
@@ -181,9 +181,6 @@ void RemoveUnreachableItems(LevelDBWrapper* db) { |
// Traverse tracker tree from sync-root. |
std::set<int64> visited_trackers; |
{ |
- scoped_ptr<ServiceMetadata> service_metadata = |
- InitializeServiceMetadata(db); |
- int64 sync_root_tracker_id = service_metadata->sync_root_tracker_id(); |
std::vector<int64> pending; |
if (sync_root_tracker_id != kInvalidTrackerID) |
pending.push_back(sync_root_tracker_id); |
@@ -255,10 +252,12 @@ scoped_ptr<MetadataDatabaseIndexOnDisk> |
MetadataDatabaseIndexOnDisk::Create(LevelDBWrapper* db) { |
DCHECK(db); |
+ scoped_ptr<ServiceMetadata> service_metadata = InitializeServiceMetadata(db); |
+ if (!service_metadata) |
+ return scoped_ptr<MetadataDatabaseIndexOnDisk>(); |
+ |
PutVersionToDB(kDatabaseOnDiskVersion, db); |
- // TODO(peria): It is not good to call RemoveUnreachableItems on every |
- // creation. |
- RemoveUnreachableItems(db); |
+ RemoveUnreachableItems(db, service_metadata->sync_root_tracker_id()); |
scoped_ptr<MetadataDatabaseIndexOnDisk> |
index(new MetadataDatabaseIndexOnDisk(db)); |