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 );