diff -r 75252ea6123b -r c7a0ce20c48c userlibandfileserver/domainmgr/src/domaincli.cpp --- a/userlibandfileserver/domainmgr/src/domaincli.cpp Mon Jul 26 10:52:56 2010 +0100 +++ b/userlibandfileserver/domainmgr/src/domaincli.cpp Fri Aug 06 16:34:38 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of the License "Eclipse Public License v1.0" @@ -19,6 +19,7 @@ #include #include + #include #include #include "domainobserver.h" @@ -380,26 +381,43 @@ { __DM_ASSERT(Handle() != KNullHandle); + aTransitionFailures.Reset(); TInt err = KErrNone; - + TInt failureCount = GetTransitionFailureCount(); if (failureCount <= 0) return failureCount; - + + // Pre-allocate array with a known size which for this case is the value in failureCount + // in order to guarantee that future append operations to the array aTransitionFailures would + // not fail. This is assuming that the pre-allocated size is not exceeded. + err=aTransitionFailures.Reserve(failureCount); + if (err != KErrNone) + return err; + TTransitionFailure* failures = new TTransitionFailure[failureCount]; if(failures == NULL) + { + aTransitionFailures.Reset(); return(KErrNoMemory); + } + TPtr8 dataPtr(reinterpret_cast(failures), failureCount * sizeof(TTransitionFailure)); TIpcArgs a(&dataPtr); err = RSessionBase::SendReceive(EDmGetTransitionFailures, a); - + if (err == KErrNone) { - for (TInt i=0; i(trans), count * sizeof(TTransInfo)); TIpcArgs a(&dataPtr); - TInt ret=RSessionBase::SendReceive(EDmObserverGetEvent, a); + ret=RSessionBase::SendReceive(EDmObserverGetEvent, a); if(ret==KErrNone) { for (TInt i=0; i