sl@0: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0: // All rights reserved.
sl@0: // This component and the accompanying materials are made available
sl@0: // under the terms of "Eclipse Public License v1.0"
sl@0: // which accompanies this distribution, and is available
sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0: //
sl@0: // Initial Contributors:
sl@0: // Nokia Corporation - initial contribution.
sl@0: //
sl@0: // Contributors:
sl@0: //
sl@0: // Description:
sl@0: //
sl@0: 
sl@0: #include <logwrap.h>
sl@0: #include "LOGPANIC.H"
sl@0: 
sl@0: #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS 
sl@0: /**
sl@0: @internalAll
sl@0: */
sl@0: const TInt KLogActiveDoNotCompleteIfActive = KMaxTInt-1;
sl@0: 
sl@0: #endif
sl@0: 
sl@0: EXPORT_C CLogActive::CLogActive(TInt aPriority)
sl@0: : CActive(aPriority)
sl@0: 	{
sl@0: 	CActiveScheduler::Add(this);
sl@0: 	}
sl@0: 
sl@0: 
sl@0: EXPORT_C CLogActive::~CLogActive()
sl@0: 	{
sl@0: 	}
sl@0: 
sl@0: EXPORT_C void CLogActive::Queue(TRequestStatus& aStatus)
sl@0: 	{
sl@0: 	__ASSERT_DEBUG(iReport==NULL, Panic(ELogAlreadyActive));
sl@0: 
sl@0: 	aStatus=KRequestPending;
sl@0: 	iReport=&aStatus;
sl@0: 	}
sl@0: 
sl@0: EXPORT_C void CLogActive::DoCancel()
sl@0: 	{
sl@0: 	TInt result=KErrCancel;
sl@0: 	Complete(result);
sl@0: 	}
sl@0: 
sl@0: EXPORT_C void CLogActive::RunL()
sl@0: 	{
sl@0: 	TInt status=iStatus.Int();
sl@0: 	if (status>=KErrNone)
sl@0: 		{
sl@0: 		TRAPD(error,DoRunL());
sl@0: 		__ASSERT_DEBUG(error==KErrNone || !IsActive(), User::Invariant());
sl@0: 		if (IsActive())	
sl@0: 			return;
sl@0: 		status=error;
sl@0: 		}
sl@0: 	Complete(status);
sl@0: 	}
sl@0: 
sl@0: EXPORT_C void CLogActive::Complete(TInt aStatus)
sl@0: 	{
sl@0: 	if (iReport)
sl@0: 		{
sl@0: 		DoComplete(aStatus);
sl@0: 		if (IsActive() && aStatus == KLogActiveDoNotCompleteIfActive)
sl@0: 			return;
sl@0: 		User::RequestComplete(iReport, aStatus);
sl@0: 		}
sl@0: 	}
sl@0: 
sl@0: EXPORT_C void CLogActive::DoComplete(TInt&)
sl@0: 	{
sl@0: 	}