imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp
branchRCL_3
changeset 11 dea39715fc05
parent 9 2eb74cf6572e
child 13 ee674526fac5
--- a/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp	Mon Mar 15 12:41:55 2010 +0200
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp	Wed Mar 31 22:04:49 2010 +0300
@@ -86,7 +86,7 @@
     TThumbnailRequestId aId, TInt aPriority, CThumbnailRequestQueue* aQueue ):
     CActive( aPriority ), iSession( aThumbnailSession ), iParamsPckg( iParams ),
     iObserver( aObserver ), iFs( aFs ), iBitmapHandle( 0 ), iRequestId( aId ), 
-    iRequestQueue( aQueue )
+    iRequestQueue( aQueue ), iCanceled( EFalse )
     {
     CActiveScheduler::Add( this );
     TN_DEBUG2( "CThumbnaiRequestActive::CThumbnailRequestActive() AO's priority = %d", Priority());
@@ -163,6 +163,7 @@
         case EReqGetThumbnailHandleLater:
             {
             // open file handle
+            iFile.Close();
             User::LeaveIfError( iFile.Open( iFs, iTargetUri, EFileShareReadersOrWriters ) );  
             
             TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iTargetUri );
@@ -219,9 +220,12 @@
     
     iTimer->Cancel();
     
-    if (iRequestType == EReqDeleteThumbnails)
+    if (iRequestType == EReqDeleteThumbnails || iCanceled)
         {
-        // no action for delete
+        iFile.Close();
+        iMyFileHandle.Close();
+    
+        // no action for delete or canceled request
         iRequestQueue->RequestComplete(this);
         
 #ifdef _DEBUG
@@ -239,8 +243,8 @@
         
         // We tried to get thumbnail using file path, but it was not found in
         // the database. We need to open the file now (on the client side) and
-        // use file handle.
-        
+        // use file handle.     
+        iFile.Close();
         TInt err = iFile.Open( iFs, iParams.iFileName, EFileShareReadersOrWriters );
         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - file handle open err = %d", err );
         User::LeaveIfError( err );
@@ -273,6 +277,10 @@
 	    iObserver.ThumbnailReady( iStatus.Int(), *iCallbackThumbnail, iParams.iRequestId );
 	  
 	    ReleaseServerBitmap();
+	    
+	    iFile.Close();
+	    iMyFileHandle.Close();
+	    
 	    iRequestQueue->RequestComplete(this);
 	    
         #ifdef _DEBUG
@@ -296,6 +304,8 @@
       
         ReleaseServerBitmap();
         
+        iFile.Close();
+        
         //set flags so that EThumbnailGeneratePersistentSizesOnly is done aka check all missing sizes 
         iParams.iQualityPreference = CThumbnailManager::EOptimizeForQuality;
         iParams.iControlFlags = EThumbnailGeneratePersistentSizesOnly;
@@ -350,12 +360,17 @@
         if ( iProcessingPreview )
             {
             TN_DEBUG2( "CThumbnailRequestActive::RunL() - iObserver.ThumbnailPreviewReady %d", iParams.iRequestId );
-			//increase priority of 2nd round (both, AO and request itself)
+			
+            //increase priority of 2nd round (both, AO and request itself)
             this->SetPriority(this->Priority() + 1);
             iParams.iPriority++;
             iObserver.ThumbnailPreviewReady( *iCallbackThumbnail, iParams.iRequestId );
             iProcessingPreview = EFalse;
+            
             ReleaseServerBitmap();
+            
+            iFile.Close();
+            
             Get2ndPhaseThumbnailL();
             }
         else
@@ -365,6 +380,9 @@
             iObserver.ThumbnailReady( iStatus.Int(), * iCallbackThumbnail, iParams.iRequestId );
             ReleaseServerBitmap();    
             
+            iFile.Close();
+            iMyFileHandle.Close();
+            
             iRequestQueue->RequestComplete(this);
             
 #ifdef _DEBUG
@@ -417,6 +435,7 @@
     
     __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
 
+    iCanceled = ETrue;
     iSession.CancelRequest( iRequestId );
     ReleaseServerBitmap();
     }
@@ -479,6 +498,9 @@
     
     ReleaseServerBitmap();
     
+    iFile.Close();
+    iMyFileHandle.Close();
+    
     iRequestCompleted = ETrue;
     iRequestQueue->RequestComplete(this);
     iRequestActive = EFalse;