diff -r 28839de615b4 -r 26645d81f48d persistentstorage/centralrepository/cenrepsrv/srvrepos_noc.cpp --- a/persistentstorage/centralrepository/cenrepsrv/srvrepos_noc.cpp Thu Aug 19 11:36:21 2010 +0300 +++ b/persistentstorage/centralrepository/cenrepsrv/srvrepos_noc.cpp Tue Aug 31 16:57:14 2010 +0300 @@ -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 { @@ -988,24 +1014,24 @@ iRepository = NULL; } -TInt CServerRepository::CheckAccessPolicyBeforeMoving(const TClientRequest& aMessage, const TServerSetting& aSourceSetting, - TUint32 aSourceKey, const TServerSetting& aTargetSetting, TUint32 aTargetKey, TUint32& aErrorKey) +TInt CServerRepository::CheckAccessPolicyBeforeMoving(const TClientRequest& aMessage, const TServerSetting* aSourceSetting, + TUint32 aSourceKey, const TServerSetting* aTargetSetting, TUint32 aTargetKey, TUint32& aErrorKey) { TInt error = KErrNone; - if (&aTargetSetting && !aTargetSetting.IsDeleted()) + if (aTargetSetting && !aTargetSetting->IsDeleted()) { error=KErrAlreadyExists; aErrorKey=aTargetKey; } - if (!aMessage.CheckPolicy(GetReadAccessPolicy(aSourceSetting), + if (!aMessage.CheckPolicy(GetReadAccessPolicy(*aSourceSetting), __PLATSEC_DIAGNOSTIC_STRING("CenRep: CServerRepository::MoveL - Attempt made to read a setting"))) { error = KErrPermissionDenied; aErrorKey = aSourceKey; } - else if (!aMessage.CheckPolicy(GetWriteAccessPolicy(aSourceSetting), + else if (!aMessage.CheckPolicy(GetWriteAccessPolicy(*aSourceSetting), __PLATSEC_DIAGNOSTIC_STRING("CenRep: CServerRepository::MoveL - Attempt made to delete a setting"))) { error = KErrPermissionDenied; @@ -1014,7 +1040,7 @@ else if (error == KErrAlreadyExists) { // set error to KErrPermissionDenied in preference to KErrAlreadyExists - if (!aMessage.CheckPolicy(GetWriteAccessPolicy(aTargetSetting), + if (!aMessage.CheckPolicy(GetWriteAccessPolicy(*aTargetSetting), __PLATSEC_DIAGNOSTIC_STRING("CenRep: CServerRepository::MoveL - Attempt made to create a setting"))) { error = KErrPermissionDenied;