Ignore:
Timestamp:
28/02/2010 16:31:27 (2 years ago)
Author:
chris
Message:

Build the reference counts for a directory before we start deleting
files, to ensure that it's initialized and memory allocated for it.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • box/trunk/bin/bbstored/HousekeepStoreAccount.cpp

    r2645 r2647  
    421421                mEmptyDirectories.push_back(dir.GetObjectID()); 
    422422        } 
    423          
     423 
     424        // Calculate reference counts first, before we start requesting 
     425        // files to be deleted. 
     426        // BLOCK 
     427        { 
     428                BackupStoreDirectory::Iterator i(dir); 
     429                BackupStoreDirectory::Entry *en = 0; 
     430 
     431                while((en = i.Next()) != 0) 
     432                { 
     433                        // This directory references this object 
     434                        if (mNewRefCounts.size() <= en->GetObjectID()) 
     435                        { 
     436                                mNewRefCounts.resize(en->GetObjectID() + 1, 0); 
     437                        } 
     438                        mNewRefCounts[en->GetObjectID()]++; 
     439                } 
     440        } 
     441 
    424442        // BLOCK 
    425443        { 
     
    468486                while((en = i.Next(BackupStoreDirectory::Entry::Flags_File)) != 0) 
    469487                { 
    470                         // This directory references this object 
    471                         if (mNewRefCounts.size() <= en->GetObjectID()) 
    472                         { 
    473                                 mNewRefCounts.resize(en->GetObjectID() + 1, 0); 
    474                         } 
    475                         mNewRefCounts[en->GetObjectID()]++; 
    476  
    477488                        // Update recalculated usage sizes 
    478489                        int16_t enFlags = en->GetFlags(); 
     
    583594                while((en = i.Next(BackupStoreDirectory::Entry::Flags_Dir)) != 0) 
    584595                { 
    585                         // This parent directory references this child 
    586                         if (mNewRefCounts.size() <= en->GetObjectID()) 
    587                         { 
    588                                 mNewRefCounts.resize(en->GetObjectID() + 1, 0); 
    589                         } 
    590                         mNewRefCounts[en->GetObjectID()]++; 
    591  
    592596                        // Next level 
    593597                        ASSERT((en->GetFlags() & BackupStoreDirectory::Entry::Flags_Dir) == BackupStoreDirectory::Entry::Flags_Dir); 
Note: See TracChangeset for help on using the changeset viewer.