diff -r 0ffb4e86fcc9 -r a179b74831c9 userlibandfileserver/domainmgr/src/domaincli.cpp --- a/userlibandfileserver/domainmgr/src/domaincli.cpp Thu Jul 15 20:11:42 2010 +0300 +++ b/userlibandfileserver/domainmgr/src/domaincli.cpp Thu Aug 19 11:14:22 2010 +0300 @@ -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