diff -r 5e4beccba4e9 -r b8bdbc8f59c7 persistentstorage/centralrepository/cenrepsrv/srvrepos_noc.cpp --- a/persistentstorage/centralrepository/cenrepsrv/srvrepos_noc.cpp Thu Jul 08 12:09:58 2010 +0100 +++ b/persistentstorage/centralrepository/cenrepsrv/srvrepos_noc.cpp Thu Aug 12 11:53:23 2010 +0100 @@ -32,12 +32,25 @@ { iNotifier = &aObserver; - iRepository = TServerResources::iObserver->AccessL(aUid, aFailIfNotFound); + TServerResources::iObserver->iObservers.ReserveL(1); + + TServerResources::iObserver->AddSharedRepositoryInfoL(aUid); + + TRAPD( err, iRepository = TServerResources::iObserver->AccessL(aUid, aFailIfNotFound) ); + //store uid - iUid = aUid; - - TServerResources::iObserver->AddObserverL(aUid, this); - TServerResources::iObserver->AddSharedRepositoryInfoL(aUid); + iUid = aUid; + + if (err == KErrNone) + { + TRAP( err, TServerResources::iObserver->AddObserverL(aUid, this) ); + } + + if (err != KErrNone) + { + TServerResources::iObserver->RemoveSharedRepositoryInfo(aUid); + User::Leave(err); + } } void CServerRepository::Close() @@ -398,6 +411,7 @@ { if(err == KErrNoMemory) { + repository->Close(); User::LeaveNoMemory(); } else @@ -652,21 +666,27 @@ // Create install rep for merging CSharedRepository *installRep = 0; - TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, installRep, CIniFileIn::EInstallOnly); + TRAPD( err, TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, installRep, CIniFileIn::EInstallOnly); CleanupStack::Pop(installRep) ); - // Perform merge - iRepository->HandleUpdateMergeL(aModified, *installRep); - - CleanupStack::PopAndDestroy(installRep); - Close(); + if (err == KErrNone) + { + // Perform merge + TRAP( err, iRepository->HandleUpdateMergeL(aModified, *installRep) ); + } + if (installRep!=NULL) + { + delete installRep; + } + Close(); + User::LeaveIfError(err); } else // No ROM or persists { // Create install rep for persisting OpenL(aUid, aNotifier); - - iRepository->CommitChangesL(); - Close(); + TRAPD(err, iRepository->CommitChangesL()); + Close(); + User::LeaveIfError(err); } } @@ -698,13 +718,19 @@ // Create ROM rep for merging CSharedRepository *romRep = 0; - TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, romRep, CIniFileIn::ERomOnly); + TRAPD( err, TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, romRep, CIniFileIn::ERomOnly); CleanupStack::Pop(romRep) ); - // Perform merge - iRepository->HandleDeleteMergeL(*romRep); - - CleanupStack::PopAndDestroy(romRep); + if (err == KErrNone) + { + // Perform merge + TRAP( err, iRepository->HandleDeleteMergeL(*romRep) ); + } + if (romRep!=NULL) + { + delete romRep; + } Close(); + User::LeaveIfError(err); } else // No ROM file, this is a complete uninstall {