166 MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening database in %S drive", |
166 MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening database in %S drive", |
167 &drivePath); |
167 &drivePath); |
168 TRAP( check, GetDatabaseL(static_cast<TDriveNumber>(driveNum)) ); |
168 TRAP( check, GetDatabaseL(static_cast<TDriveNumber>(driveNum)) ); |
169 if( check == KErrNotFound ) |
169 if( check == KErrNotFound ) |
170 { |
170 { |
|
171 MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: re-creating database"); |
171 CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL( |
172 CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL( |
172 static_cast<TDriveNumber>(driveNum), iFs ); |
173 static_cast<TDriveNumber>(driveNum), iFs ); |
173 CleanupStack::PushL( dB ); |
174 CleanupStack::PushL( dB ); |
174 TRAPD(openError, rtn |= dB->OpenL() ); //lint !e665 |
175 TRAPD(openError, rtn |= dB->OpenL() ); //lint !e665 |
175 if(openError == KErrNone) |
176 if(openError == KErrNone) |
177 iDatabases.AppendL( dB ); |
178 iDatabases.AppendL( dB ); |
178 CleanupStack::Pop( dB ); |
179 CleanupStack::Pop( dB ); |
179 } |
180 } |
180 else |
181 else |
181 { |
182 { |
|
183 MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError); |
182 CleanupStack::PopAndDestroy( dB ); |
184 CleanupStack::PopAndDestroy( dB ); |
183 } |
185 } |
184 } |
186 } |
185 else if( check == KErrNone ) |
187 else if( check == KErrNone ) |
186 { |
188 { |
187 TRAPD(openError, GetDatabaseL(static_cast<TDriveNumber>(driveNum)).OpenL() ); |
189 TRAPD(openError, GetDatabaseL(static_cast<TDriveNumber>(driveNum)).OpenL() ); |
188 if(openError != KErrNone) |
190 if(openError != KErrNone) |
189 { |
191 { |
|
192 MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError); |
190 TRAP_IGNORE( RemoveDatabaseL(static_cast<TDriveNumber>(driveNum))); |
193 TRAP_IGNORE( RemoveDatabaseL(static_cast<TDriveNumber>(driveNum))); |
191 } |
194 } |
192 } |
195 } |
193 } |
196 } |
194 } |
197 } |
291 { |
294 { |
292 CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i]; |
295 CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i]; |
293 if ( db->GetDbDrive() == aDrive) |
296 if ( db->GetDbDrive() == aDrive) |
294 { |
297 { |
295 db->Close(); |
298 db->Close(); |
|
299 #ifdef __RAMDISK_PERF_ENABLE |
|
300 if( iRAMDiskPerfEnabled && db->IsUseRamDrive() ) |
|
301 { |
|
302 MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase DB is on RAM"); |
|
303 db->SetRamDriveInfo( iRAMDrive, EFalse ); |
|
304 TRAPD( err, DoCopyDBFromRamL(aDrive) ); |
|
305 if ( err ) |
|
306 { |
|
307 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase DB copy error=%d", err); |
|
308 RemoveDummyFile(i); |
|
309 } |
|
310 } |
|
311 #endif |
296 break; |
312 break; |
297 } |
313 } |
298 } |
314 } |
299 } |
315 } |
300 MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase --->"); |
316 MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase --->"); |
587 //iMtpAddCount = 0; |
603 //iMtpAddCount = 0; |
588 //iUpdateCount = 0; |
604 //iUpdateCount = 0; |
589 |
605 |
590 if( iRAMDiskPerfEnabled ) |
606 if( iRAMDiskPerfEnabled ) |
591 { |
607 { |
|
608 // Should not leave until all the databases have been copied from RAM drive. |
|
609 TInt leaveError = KErrNone; |
592 TInt count(iDatabases.Count()); |
610 TInt count(iDatabases.Count()); |
593 for (TInt i = 0; i < count; ++i) |
611 for (TInt i = 0; i < count; ++i) |
594 { |
612 { |
595 TInt err = KErrNone; |
613 TInt err = KErrNone; |
596 TDriveUnit drive( iDatabases[i]->GetDbDrive() ); |
614 TDriveUnit drive( iDatabases[i]->GetDbDrive() ); |
603 |
621 |
604 // Set the UseRamDrive bool to False. |
622 // Set the UseRamDrive bool to False. |
605 iDatabases[i]->SetRamDriveInfo( iRAMDrive, EFalse ); |
623 iDatabases[i]->SetRamDriveInfo( iRAMDrive, EFalse ); |
606 // Get the db state in order to restore it later. |
624 // Get the db state in order to restore it later. |
607 TDbState dbState = iDatabases[i]->GetDbState(); |
625 TDbState dbState = iDatabases[i]->GetDbState(); |
608 iDatabases[i]->SetDbStateL(EDbClose); |
626 TRAP( err, iDatabases[i]->SetDbStateL(EDbClose) ); |
609 TRAP( err, DoCopyDBFromRamL(drive) ); |
627 if ( err == KErrNone ) |
|
628 { |
|
629 TRAP( err, DoCopyDBFromRamL(drive) ); |
|
630 } |
|
631 else |
|
632 { |
|
633 // Error closing db on RAM drive, try to delete it. |
|
634 TFileName ramDB; |
|
635 ramDB = GenerateHarvesterDbName( drive, ETrue ); |
|
636 BaflUtils::DeleteFile(iFs, ramDB); |
|
637 } |
|
638 |
610 if ( err ) |
639 if ( err ) |
611 { |
640 { |
612 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsFromRamL copy error=%d", err); |
641 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsFromRamL copy error=%d", err); |
613 //anyting wrong, delete the temp file. |
642 //anyting wrong, delete the temp file. |
614 RemoveDummyFile(i); |
643 RemoveDummyFile(i); |
615 } |
644 } |
616 |
645 |
617 // Restore the db state. |
646 // Restore the db state. |
618 iDatabases[i]->SetDbStateL( dbState ); |
647 TRAPD( error, iDatabases[i]->SetDbStateL( dbState ) ); |
619 } |
648 if ( error && !leaveError ) |
|
649 { |
|
650 leaveError = error; |
|
651 } |
|
652 } |
|
653 User::LeaveIfError( leaveError ); |
620 } |
654 } |
621 } |
655 } |
622 |
656 |
623 // --------------------------------------------------------------------------- |
657 // --------------------------------------------------------------------------- |
624 // CMPXHarvesterDatabaseManager::DoCopyDBFromRamL |
658 // CMPXHarvesterDatabaseManager::DoCopyDBFromRamL |
633 |
667 |
634 dst = GenerateHarvesterDbName( aDriveUnit ); |
668 dst = GenerateHarvesterDbName( aDriveUnit ); |
635 src = GenerateHarvesterDbName( aDriveUnit, ETrue ); |
669 src = GenerateHarvesterDbName( aDriveUnit, ETrue ); |
636 MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL from %S to %S", &src, &dst ); |
670 MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL from %S to %S", &src, &dst ); |
637 |
671 |
638 // Rename the temp file into real Db name |
|
639 TFileName dummyDbFileName = GenerateDummyDbName( aDriveUnit ); |
672 TFileName dummyDbFileName = GenerateDummyDbName( aDriveUnit ); |
640 |
673 |
641 //Copy Db from RAM to replace dummy file |
674 //Copy Db from RAM to replace dummy file |
642 err = BaflUtils::CopyFile(iFs, src, dummyDbFileName); |
675 err = BaflUtils::CopyFile(iFs, src, dummyDbFileName); |
643 MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL database copied from ram drive err=%d.", err); |
676 MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL database copied from ram drive err=%d.", err); |
644 |
677 |
645 // delete db in ram drive. |
678 // delete db on ram drive. |
646 TInt delErr = BaflUtils::DeleteFile(iFs, src); |
679 TInt delErr = BaflUtils::DeleteFile(iFs, src); |
647 MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL db on ram drive deleted file=%S, err=%d", &src, delErr); |
680 MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL db on ram drive deleted file=%S, err=%d", &src, delErr); |
648 |
681 |
649 // Make sure we del db from ram drive before leaving. |
682 // Make sure we del db from ram drive before leaving. |
650 User::LeaveIfError( err ); |
683 User::LeaveIfError( err ); |