mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp
branchRCL_3
changeset 19 51035f0751c2
parent 17 780c925249c1
child 23 4740b34b83ce
--- a/mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -168,6 +168,7 @@
             TRAP( check, GetDatabaseL(static_cast<TDriveNumber>(driveNum)) );
             if( check == KErrNotFound )
                 {
+                MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: re-creating database");
                 CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL(
                     static_cast<TDriveNumber>(driveNum), iFs );
                 CleanupStack::PushL( dB );
@@ -179,6 +180,7 @@
                     }
                 else
                     {
+                    MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError);
                     CleanupStack::PopAndDestroy( dB );
                     }
                 }
@@ -187,6 +189,7 @@
                 TRAPD(openError, GetDatabaseL(static_cast<TDriveNumber>(driveNum)).OpenL() );
                 if(openError != KErrNone)
                     {
+                    MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError);
                     TRAP_IGNORE( RemoveDatabaseL(static_cast<TDriveNumber>(driveNum)));
                     }
                 }
@@ -293,6 +296,19 @@
             if ( db->GetDbDrive() == aDrive)
                 {
                 db->Close();
+#ifdef __RAMDISK_PERF_ENABLE                
+                if( iRAMDiskPerfEnabled && db->IsUseRamDrive() )
+                    {
+                    MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase DB is on RAM");
+                    db->SetRamDriveInfo( iRAMDrive, EFalse ); 
+                    TRAPD( err, DoCopyDBFromRamL(aDrive) );
+                    if ( err )
+                        {
+                        MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase DB copy error=%d", err);                
+                        RemoveDummyFile(i);
+                        }
+                    }
+#endif
                 break;
                 }
             }
@@ -589,6 +605,8 @@
 
     if( iRAMDiskPerfEnabled )
        {
+        // Should not leave until all the databases have been copied from RAM drive. 
+        TInt leaveError = KErrNone;
         TInt count(iDatabases.Count());
         for (TInt i = 0; i < count; ++i)
             {
@@ -605,8 +623,19 @@
             iDatabases[i]->SetRamDriveInfo( iRAMDrive, EFalse );
             // Get the db state in order to restore it later.
             TDbState dbState = iDatabases[i]->GetDbState();
-            iDatabases[i]->SetDbStateL(EDbClose);
-            TRAP( err, DoCopyDBFromRamL(drive) );
+            TRAP( err, iDatabases[i]->SetDbStateL(EDbClose) );
+            if ( err == KErrNone )
+                {
+                TRAP( err, DoCopyDBFromRamL(drive) );
+                }
+            else
+                {
+                // Error closing db on RAM drive, try to delete it.
+                TFileName ramDB;
+                ramDB = GenerateHarvesterDbName( drive, ETrue );
+                BaflUtils::DeleteFile(iFs, ramDB);
+                }
+            
             if ( err )
                 {
                 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsFromRamL copy error=%d", err);                
@@ -615,8 +644,13 @@
                 }
 
             // Restore the db state.
-            iDatabases[i]->SetDbStateL( dbState );
+            TRAPD( error, iDatabases[i]->SetDbStateL( dbState ) );
+            if ( error && !leaveError )
+                {
+                leaveError = error;
+                }
             }
+        User::LeaveIfError( leaveError );
         }
     }
 
@@ -635,14 +669,13 @@
     src = GenerateHarvesterDbName( aDriveUnit, ETrue );
     MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL from %S to %S", &src, &dst );
 
-    // Rename the temp file into real Db name
     TFileName dummyDbFileName = GenerateDummyDbName( aDriveUnit ); 
 
     //Copy Db from RAM to replace dummy file
     err = BaflUtils::CopyFile(iFs, src, dummyDbFileName);
     MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL database copied from ram drive err=%d.", err);
     
-    // delete db in ram drive.
+    // delete db on ram drive.
     TInt delErr = BaflUtils::DeleteFile(iFs, src);
     MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL db on ram drive deleted file=%S, err=%d", &src, delErr);