diff -r cb86b71cae0a -r 4bdfb6b5c9b4 imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp --- a/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp Fri Jun 11 13:58:45 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp Wed Jun 23 18:33:48 2010 +0300 @@ -95,6 +95,8 @@ TPtrC8 ptr = metaCont.Field8( EMetaDataJpeg ); HBufC8* data = ptr.AllocL(); + CleanupStack::PopAndDestroy(&wantedFields); + CleanupStack::PopAndDestroy(metaDataUtil); CleanupStack::PushL( data ); if(data->Length() == 0) @@ -111,12 +113,18 @@ iFlags = aFlags; //set default mode displaymode from global constants iDisplayMode = KStoreDisplayMode; - - iImageDecoderv3->CreateL( data, *iObserver, iFlags, iMimeType, iTargetSize ); - - CleanupStack::Pop( data ); - CleanupStack::PopAndDestroy(&wantedFields); - CleanupStack::PopAndDestroy(metaDataUtil); + TRAPD( err, iImageDecoderv3->CreateL( data, *iObserver, iFlags, iMimeType, iTargetSize ) ); + if (err == KErrNone) + { + CleanupStack::Pop( data ); + } + else + { + // this is because data buffer is already released in CreateDecoderL + // and we must prevent automatic PopAndDestroy + CleanupStack::Pop( data ); + User::Leave(err); + } iOriginalSize = iImageDecoderv3->OriginalSize(); iImageDecoderv3->DecodeL( iDisplayMode );