imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp
branchRCL_3
changeset 28 ff2fb7658ff7
parent 24 f0aa341a25bf
child 38 2b4b06654caa
--- a/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp	Wed Jun 09 10:01:32 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp	Mon Jun 21 16:00:46 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 );