--- a/memspy/Driver/Kernel/Source/SubChannels/MemSpyDriverLogChanContainerBase.cpp Fri Aug 27 11:37:29 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,278 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-#include "MemSpyDriverLogChanContainerBase.h"
-
-// Shared includes
-#include "MemSpyDriverOpCodes.h"
-#include <memspy/driver/memspydriverobjectsshared.h>
-#include "MemSpyDriverObjectsInternal.h"
-
-// User includes
-#include "MemSpyDriverUtils.h"
-#include "MemSpyDriverDevice.h"
-#include "MemSpyDriverOSAdaption.h"
-
-
-DMemSpyDriverLogChanContainerBase::DMemSpyDriverLogChanContainerBase( DMemSpyDriverDevice& aDevice, DThread& aThread )
-: DMemSpyDriverLogChanBase( aDevice, aThread )
- {
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::DMemSpyDriverLogChanContainerBase() - this: 0x%08x", this ));
- }
-
-
-DMemSpyDriverLogChanContainerBase::~DMemSpyDriverLogChanContainerBase()
- {
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::~DMemSpyDriverLogChanContainerBase() - START - this: 0x%08x", this ));
-
- ResetTempHandles();
-
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::~DMemSpyDriverLogChanContainerBase() - END - this: 0x%08x", this ));
- }
-
-
-
-
-
-
-DObject* DMemSpyDriverLogChanContainerBase::CheckedOpen(TMemSpyDriverContainerType aContainerType, DObject* aObject, TBool aQuick)
- {
- __ASSERT_CRITICAL;
- __ASSERT_DEBUG(aObject != NULL, MemSpyDriverUtils::Fault( __LINE__ ));
- const TObjectType expectedType = ObjectTypeFromMemSpyContainerType(aContainerType);
-
- // Quick mode means we just check container ids and we trust that the object will exist.
- // [TomS: not entirely convinced we can ever be certain of that]
- TInt err = KErrNotFound;
- if (aQuick)
- {
- LOG("quick CheckedOpen of %08x", aObject);
- const TObjectType objectType = OSAdaption().DThread().GetObjectType(*aObject);
- if (objectType == expectedType)
- {
- err = aObject->Open();
- }
- }
- else
- {
- DObjectCon* container = Kern::Containers()[expectedType];
- container->Wait();
- const TInt count = container->Count();
- for (TInt i = 0; i < count; i++)
- {
- DObject* object = (*container)[i];
- if (object == aObject)
- {
- err = aObject->Open();
- break;
- }
- }
- container->Signal();
- }
-
- LOG("CheckedOpen(%d, 0x%08x, quick=%d) returned error %d", aContainerType, aObject, aQuick, err);
- return (err == KErrNone) ? aObject : NULL;
- }
-
-
-
-TObjectType DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType( TMemSpyDriverContainerType aType )
- {
- // Map type
- TObjectType type = EObjectTypeAny;
- switch( aType )
- {
- case EMemSpyDriverContainerTypeThread:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeThread" ));
- type = EThread;
- break;
- case EMemSpyDriverContainerTypeProcess:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeProcess" ));
- type = EProcess;
- break;
- case EMemSpyDriverContainerTypeChunk:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeChunk" ));
- type = EChunk;
- break;
- case EMemSpyDriverContainerTypeLibrary:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeLibrary" ));
- type = ELibrary;
- break;
- case EMemSpyDriverContainerTypeSemaphore:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeSemaphore" ));
- type = ESemaphore;
- break;
- case EMemSpyDriverContainerTypeMutex:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeMutex" ));
- type = EMutex;
- break;
- case EMemSpyDriverContainerTypeTimer:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeTimer" ));
- type = ETimer;
- break;
- case EMemSpyDriverContainerTypeServer:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeServer" ));
- type = EServer;
- break;
- case EMemSpyDriverContainerTypeSession:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeSession" ));
- type = ESession;
- break;
- case EMemSpyDriverContainerTypeLogicalDevice:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeLogicalDevice" ));
- type = ELogicalDevice;
- break;
- case EMemSpyDriverContainerTypePhysicalDevice:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypePhysicalDevice" ));
- type = EPhysicalDevice;
- break;
- case EMemSpyDriverContainerTypeLogicalChannel:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeLogicalChannel" ));
- type = ELogicalChannel;
- break;
- case EMemSpyDriverContainerTypeChangeNotifier:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeChangeNotifier" ));
- type = EChangeNotifier;
- break;
- case EMemSpyDriverContainerTypeUndertaker:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeUndertaker" ));
- type = EUndertaker;
- break;
- case EMemSpyDriverContainerTypeMsgQueue:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeMsgQueue" ));
- type = EMsgQueue;
- break;
- case EMemSpyDriverContainerTypePropertyRef:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypePropertyRef" ));
- type = EPropertyRef;
- break;
- case EMemSpyDriverContainerTypeCondVar:
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType() - EMemSpyDriverContainerTypeCondVar" ));
- type = ECondVar;
- break;
- default:
- Kern::Printf("DMemSpyDriverLogChanContainerBase::ObjectTypeFromMemSpyContainerType - unsupported container type: %d", aType);
- break;
- }
- //
- return type;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-void DMemSpyDriverLogChanContainerBase::ResetTempHandles()
- {
- iTempHandleCount = 0;
- }
-
-
-void DMemSpyDriverLogChanContainerBase::AddTempHandle( TAny* aHandle )
- {
- __ASSERT_ALWAYS( iTempHandleCount >= 0, MemSpyDriverUtils::Fault( __LINE__) );
- if ( iTempHandleCount < KMemSpyDriverMaxHandles )
- {
- iTempHandles[ iTempHandleCount++ ] = aHandle;
- }
- }
-
-
-TAny* DMemSpyDriverLogChanContainerBase::TempHandleAt( TInt aIndex ) const
- {
- __ASSERT_ALWAYS( aIndex >= 0 && aIndex < KMemSpyDriverMaxHandles, MemSpyDriverUtils::Fault(__LINE__) );
- __ASSERT_ALWAYS( aIndex < iTempHandleCount, MemSpyDriverUtils::Fault(__LINE__) );
- return iTempHandles[ aIndex ];
- }
-
-
-TInt DMemSpyDriverLogChanContainerBase::TempHandleCount() const
- {
- TRACE( Kern::Printf( "DMemSpyDriverLogChanContainerBase::TempHandleCount() - END - count is: %d", iTempHandleCount ));
- return iTempHandleCount;
- }
-
-
-TInt DMemSpyDriverLogChanContainerBase::WriteToClient( TAny** aHandlePtr, TInt* aCountPtr, TInt aMaxCount )
- {
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::WriteToClient() - START - iTempHandleCount: %d", iTempHandleCount ));
-
- TInt r = KErrNone;
-
- // This variable holds the number of handles that we have already
- // written to the client-side.
- TInt currentWriteIndex = 0;
-
- // If the client passed a bad descriptor then we panic it. Otherwise, we always update the amount
- // of handles we have found (even if there was an error - i.e. we set the value to zero) or else
- // the client will attempt to index through its huge stack-based handle array.
- NKern::ThreadEnterCS();
- TInt tempHandleCount = TempHandleCount();
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::GetContainerHandles - trying to write %d handles to client...", tempHandleCount ));
-
- for( ; currentWriteIndex<tempHandleCount && r == KErrNone && currentWriteIndex < aMaxCount; )
- {
- TAny* handle = TempHandleAt( currentWriteIndex );
- r = Kern::ThreadRawWrite( &ClientThread(), aHandlePtr + currentWriteIndex, &handle, sizeof(TAny*) );
- if (r == KErrNone)
- {
- ++currentWriteIndex;
- }
- }
-
- if ( r == KErrBadDescriptor )
- {
- MemSpyDriverUtils::PanicThread( ClientThread(), EPanicBadDescriptor );
- }
- else
- {
- const TInt finalWrite = Kern::ThreadRawWrite( &ClientThread(), aCountPtr, ¤tWriteIndex, sizeof(TInt) );
- if ( r == KErrNone )
- {
- r = finalWrite;
- }
- }
- NKern::ThreadLeaveCS();
-
- TRACE( Kern::Printf("DMemSpyDriverLogChanContainerBase::GetContainerHandles() - END - r: %d", r));
- return r;
- }