perfsrv/memspy/Engine/Source/Helpers/MemSpyEngineHelperFbServ.cpp
changeset 62 1c2bb2fc7c87
parent 51 98307c651589
--- a/perfsrv/memspy/Engine/Source/Helpers/MemSpyEngineHelperFbServ.cpp	Fri Oct 08 14:56:39 2010 +0300
+++ b/perfsrv/memspy/Engine/Source/Helpers/MemSpyEngineHelperFbServ.cpp	Tue Oct 26 16:20:32 2010 +0300
@@ -437,65 +437,67 @@
     delete con;
 
     // We should have the valid CObjectCon data now.
-    RDesReadStream stream( *cellData );
-    CleanupClosePushL( stream );
+    if( cellData )
+    	{
+		RDesReadStream stream( *cellData );
+		CleanupClosePushL( stream );
     
-    // Read vtable
-    const TUint32 vTable = stream.ReadUint32L();
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - actual vTable: 0x%08x", vTable ));
-    if  ( vTable != KExpectedObjectConVTable )
-        {
-        User::Leave( KErrNotFound );
-        }
+		// Read vtable
+		const TUint32 vTable = stream.ReadUint32L();
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - actual vTable: 0x%08x", vTable ));
+		if  ( vTable != KExpectedObjectConVTable )
+			{
+			User::Leave( KErrNotFound );
+			}
 
-    const TInt uniqueId = stream.ReadInt32L();
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - uniqueId: %d", uniqueId ));
+		const TInt uniqueId = stream.ReadInt32L();
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - uniqueId: %d", uniqueId ));
 
-    aCount = stream.ReadInt32L();
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - aCount: %d", aCount ));
+		aCount = stream.ReadInt32L();
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - aCount: %d", aCount ));
 
-    aAllocated = stream.ReadInt32L();
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - aAllocated: %d", aAllocated ));
+		aAllocated = stream.ReadInt32L();
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - aAllocated: %d", aAllocated ));
 
-    // This is actually CObject's iObject, i.e. CObject** iObjects.
-    TAny* pObjects = reinterpret_cast< TAny*>( stream.ReadUint32L() );
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - pObjects: 0x%08x", pObjects ));
-
-    CleanupStack::PopAndDestroy( 2, cellData ); // cellData & stream
+		// This is actually CObject's iObject, i.e. CObject** iObjects.
+		TAny* pObjects = reinterpret_cast< TAny*>( stream.ReadUint32L() );
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - pObjects: 0x%08x", pObjects ));
 
-    // Now fetch the cell containing the CObject pointers...
-    err = iEngine.Driver().WalkHeapGetCellInfo( pObjects, cellType, cellLength, cellNestingLevel, cellAllocationNumber, cellHeaderSize, cellPayloadAddress );
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - array of CObject* cell fetch err: %d, cellAddress: 0x%08x, cellLength: %d, cellAllocationNumber: %d, cellType: %d", err, aCellAddress, cellLength, cellAllocationNumber, cellType));
-    User::LeaveIfError( err );
+    	CleanupStack::PopAndDestroy( 2, cellData ); // cellData & stream
+    
+		// Now fetch the cell containing the CObject pointers...
+		err = iEngine.Driver().WalkHeapGetCellInfo( pObjects, cellType, cellLength, cellNestingLevel, cellAllocationNumber, cellHeaderSize, cellPayloadAddress );
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - array of CObject* cell fetch err: %d, cellAddress: 0x%08x, cellLength: %d, cellAllocationNumber: %d, cellType: %d", err, aCellAddress, cellLength, cellAllocationNumber, cellType));
+		User::LeaveIfError( err );
 
-    const TInt expectedSize = ( aAllocated * sizeof(CObject*) ) + cellHeaderSize;
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - expectedSize: %d, actual size: %d", expectedSize, cellLength ));
-    if  ( cellLength < expectedSize )
-        {
-        User::Leave( KErrUnderflow );
-        }
+		const TInt expectedSize = ( aAllocated * sizeof(CObject*) ) + cellHeaderSize;
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - expectedSize: %d, actual size: %d", expectedSize, cellLength ));
+		if  ( cellLength < expectedSize )
+			{
+			User::Leave( KErrUnderflow );
+			}
     
-    // Get the data
-    cellData = HBufC8::NewLC( cellLength );
-    TPtr8 pData( cellData->Des() );
-    err = iEngine.Driver().WalkHeapReadCellData( pObjects, pData, cellLength );
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - reading cell data returned error: %d", err));
-    User::LeaveIfError( err );
+		// Get the data
+		cellData = HBufC8::NewLC( cellLength );
+		TPtr8 pData( cellData->Des() );
+		err = iEngine.Driver().WalkHeapReadCellData( pObjects, pData, cellLength );
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - reading cell data returned error: %d", err));
+		User::LeaveIfError( err );
 
-    // Open stream
-    stream.Open( *cellData );
-    CleanupClosePushL( stream );
+		// Open stream
+		stream.Open( *cellData );
+		CleanupClosePushL( stream );
 
-    // Extract array of pointers
-    for( TInt i=0; i<aCount; i++ )
-        {
-        TAny* objectAddress = reinterpret_cast< TAny*>( stream.ReadUint32L() );
-        TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - object[%04d]: 0x%08x", i, objectAddress ));
-        aContainerObjects.AppendL( objectAddress );
-        }
-    CleanupStack::PopAndDestroy( 2, cellData ); // cellData & stream
-
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - END" ));
+		// Extract array of pointers
+		for( TInt i=0; i<aCount; i++ )
+			{
+			TAny* objectAddress = reinterpret_cast< TAny*>( stream.ReadUint32L() );
+			TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - object[%04d]: 0x%08x", i, objectAddress ));
+			aContainerObjects.AppendL( objectAddress );
+			}		
+	    CleanupStack::PopAndDestroy( 2, cellData ); // cellData & stream
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - END" ));		
+    	}
     }
 
 
@@ -773,33 +775,36 @@
         User::Leave( KErrNotFound );
         }
 
-    RDesReadStream stream( *cellData );
-    CleanupClosePushL( stream );
-    
-    // Read vtable
-    const TUint32 vTable = stream.ReadUint32L();
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - actual vTable: 0x%08x", vTable ));
-    TBool isROMAddress = EFalse;
-    err = User::IsRomAddress( isROMAddress, (TAny*) vTable );
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - vtable (0x%08x) is in ROM: %d (error: %d)", vTable, isROMAddress, err));
-    User::LeaveIfError( err );
+    if( cellData )
+    	{
+		RDesReadStream stream( *cellData );
+		CleanupClosePushL( stream );
+    	    
+		// Read vtable
+		const TUint32 vTable = stream.ReadUint32L();
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - actual vTable: 0x%08x", vTable ));
+		TBool isROMAddress = EFalse;
+		err = User::IsRomAddress( isROMAddress, (TAny*) vTable );
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - vtable (0x%08x) is in ROM: %d (error: %d)", vTable, isROMAddress, err));
+		User::LeaveIfError( err );
 
-    // Skip CObject members
-    (void) stream.ReadL( sizeof( CObject ) ); // skip this much
-    object->iThisPointer = reinterpret_cast< CBitmapObject* >( cellPayloadAddress );;
-    object->iTop = reinterpret_cast< CBase* >( stream.ReadUint32L() );
-    object->iAddressPointer = reinterpret_cast< CBitwiseBitmap* >( stream.ReadUint32L() );
-    object->iHandle = stream.ReadInt32L();
-    object->iCleanBitmap = reinterpret_cast< CBitmapObject* >( stream.ReadUint32L() );
+		// Skip CObject members
+		(void) stream.ReadL( sizeof( CObject ) ); // skip this much
+		object->iThisPointer = reinterpret_cast< CBitmapObject* >( cellPayloadAddress );;
+		object->iTop = reinterpret_cast< CBase* >( stream.ReadUint32L() );
+		object->iAddressPointer = reinterpret_cast< CBitwiseBitmap* >( stream.ReadUint32L() );
+		object->iHandle = stream.ReadInt32L();
+		object->iCleanBitmap = reinterpret_cast< CBitmapObject* >( stream.ReadUint32L() );
 
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iThisPointer:    0x%08x", object->iThisPointer ));
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iTop:            0x%08x", object->iTop ));
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iAddressPointer: 0x%08x", object->iAddressPointer ));
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iHandle:         0x%08x", object->iHandle ));
-    TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iCleanBitmap:    0x%08x", object->iCleanBitmap ));
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iThisPointer:    0x%08x", object->iThisPointer ));
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iTop:            0x%08x", object->iTop ));
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iAddressPointer: 0x%08x", object->iAddressPointer ));
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iHandle:         0x%08x", object->iHandle ));
+		TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iCleanBitmap:    0x%08x", object->iCleanBitmap ));
     
-    // Clean up - don't need this data anymore. Real data is in another cell
-    CleanupStack::PopAndDestroy( 2, cellData );  // stream & cellData
+		// Clean up - don't need this data anymore. Real data is in another cell
+    	CleanupStack::PopAndDestroy( 2, cellData );  // stream & cellData
+    	}
 
     TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - END - aCellAddress: 0x%08x", aCellAddress ));
     return object;