diff -r f85613f12947 -r dbd1c5e08735 connectivitymodules/SeCon/services/ftp/src/sconftp.cpp --- a/connectivitymodules/SeCon/services/ftp/src/sconftp.cpp Mon Jun 21 16:36:59 2010 +0300 +++ b/connectivitymodules/SeCon/services/ftp/src/sconftp.cpp Thu Jul 15 19:35:12 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -378,21 +378,7 @@ if( ret == KErrNone ) { - delete aObject; - aObject = CObexBufObject::NewL( NULL ); - - if( aBuffer ) - { - aBuffer->Reset(); - delete aBuffer; - } - - aBuffer = CBufFlat::NewL( KSConBufferSize ); - aBuffer->ResizeL( KSConBufferSize ); - - TObexFilenameBackedBuffer bufferdetails( *aBuffer, iTempFileName, - CObexBufObject::EDoubleBuffering ); - aObject->SetDataBufL( bufferdetails ); + CreateObexBufObjectL( aObject, aBuffer ); } } else @@ -432,21 +418,7 @@ if( ret == KErrNone ) { - delete aObject; - aObject = CObexBufObject::NewL( NULL ); - - if( aBuffer ) - { - aBuffer->Reset(); - delete aBuffer; - } - - aBuffer = CBufFlat::NewL( KSConBufferSize ); - aBuffer->ResizeL( KSConBufferSize ); - - TObexFilenameBackedBuffer bufferdetails( *aBuffer, iTempFileName, - CObexBufObject::EDoubleBuffering ); - aObject->SetDataBufL( bufferdetails ); + CreateObexBufObjectL( aObject, aBuffer ); if( lowMemory ) { @@ -460,6 +432,31 @@ return ret; } +void CSConFTP::CreateObexBufObjectL( CObexBufObject*& aObject, CBufFlat*& aBuffer ) + { + delete aObject; + aObject = NULL; + aObject = CObexBufObject::NewL( NULL ); + + delete aBuffer; + aBuffer = NULL; + + aBuffer = CBufFlat::NewL( KSConBufferSize ); + aBuffer->ResizeL( KSConBufferSize ); + + TObexFilenameBackedBuffer bufferdetails( *aBuffer, iTempFileName, + CObexBufObject::EDoubleBuffering ); + TRAPD( err, aObject->SetDataBufL( bufferdetails )); + if ( err == KErrNoMemory ) + { + LOGGER_WRITE( "KErrNoMemory, Using singe buffer strategy"); + // If fails, use singe buffer strategy to save RAM + TObexFilenameBackedBuffer lowMemBufferdetails( *aBuffer, iTempFileName, + CObexBufObject::ESingleBuffering ); + aObject->SetDataBufL( lowMemBufferdetails ); + } + } + // ----------------------------------------------------------------------------- // CSConFTP::PutFileObjectFinalizeL( CObexBufObject*& aObject ) // Stores the relayed file object to inbox or file system.