diff -r 7403edfcf0fb -r dea39715fc05 imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnaildecodetask.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnaildecodetask.cpp Mon Mar 15 12:41:55 2010 +0200 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnaildecodetask.cpp Wed Mar 31 22:04:49 2010 +0300 @@ -143,28 +143,32 @@ if ( ClientThreadAlive() ) { - TRAP_IGNORE(iServer.AddBitmapToPoolL( iRequestId.iSession, aBitmap, iRequestId )); - const TSize bitmapSize = aBitmap->SizeInPixels(); - iBitmapHandle = aBitmap->Handle(); - aBitmap = NULL; - - // Complete message and pass bitmap handle to client + // pass bitmap handle to client TThumbnailRequestParams& params = iParamsBuf(); TInt ret = iMessage.Read( 0, iParamsBuf ); if(ret == KErrNone ) { - params.iBitmapHandle = iBitmapHandle; + params.iBitmapHandle = aBitmap->Handle(); ret = iMessage.Write( 0, iParamsBuf ); } - Complete( ret ); - ResetMessageData(); - - // Successfully completed the message. The client will send - // EReleaseBitmap message later to delete the bitmap from pool. - // CThumbnailScaleTask is no longer responsible for that. - iBitmapHandle = 0; + // add bitmap to pool + TRAPD(err, iServer.AddBitmapToPoolL( iRequestId.iSession, aBitmap, iRequestId ) ); + if (err != KErrNone) + { + Complete( err ); + delete aBitmap; + aBitmap = NULL; + } + else + { + aBitmap = NULL; // Server owns the bitmap now + + // Complete message + Complete( ret ); + ResetMessageData(); + } } else {