diff -r 000000000000 -r c6b0df440bee dbgsrv/coredumpserver/server/inc/corecrashhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dbgsrv/coredumpserver/server/inc/corecrashhandler.h Tue Mar 02 10:33:16 2010 +0530 @@ -0,0 +1,116 @@ +// Copyright (c) 2007-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: +// + + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef CORE_CRASH_HANDLER_H +#define CORE_CRASH_HANDLER_H + +#include +#include +#include +#include + +class CCoreDumpSession; + +const TUid KUidSELFFormatterV1 = TUid::Uid(0x10282fe3); + +//Identifier for SELF v1 +_LIT(KSelfV1, "Symbian Elf Core Dump formatter"); +_LIT(KDexcV1, "D_EXC formatter plugin description"); + +typedef struct GCCCrashEventInfo : TEventInfo +{ + TTime iEventTime; +} TCrashEventInfo; + +_LIT(KCrashProcessingThread, "core_dump_processor"); //crash processing thread name + +/** +Active object class that creates the thread that handles the crash generation +@see CCoreDumpSession +@see CTargetObserver +@see CCoreDumpFormatter +*/ +class CCrashHandler : public CActive +{ + static TInt Processing(TAny* aParam); //crash processing thread entry point + + struct TCrashThreadParams //crash processing thread params + { + CCoreDumpFormatter *iFormatter; + TCrashInfo iCrashInfo; + }; + + enum {EEventsQueueDefaultLength = 1}; + +public: + + /** + * Defines the type of crash we are processing and so what DS to use + */ + enum TCrashType + { + ELiveCrash, //!< Live Application Crash + ESystemCrash,//!< System Crash (ie. Flash) + ELast //!< ELast + }; + + static CCrashHandler* NewL(CCoreDumpSession &aCoreSess); + static CCrashHandler* NewLC(CCoreDumpSession &aCoreSess); + ~CCrashHandler(); + + TBool CrashInProgress() const {return iThreadsRun > 0 ? ETrue : EFalse;}; + void HandleCrashEventL(const TCrashEventInfo &aEventInfo); + void HandleCrashFromFlashL(const TCrashInfo& aCrashInf); + void HandleCrashFromFlashL(const TCrashInfo& aCrashInf, const RMessage2& aMessage); + void CancelHandleCrashFromFlash(const TCrashInfo& aCrashInf); + +protected: + CCrashHandler(CCoreDumpSession &aCoreSess); + void ConstructL(); + + virtual void RunL(); + virtual void DoCancel(); + virtual TInt RunError(TInt aError); + +private: + void ProcessCrashL(const TCrashInfo::TCrashSource& aType); + void ProcessLiveCrashL(); + void ProcessSystemCrashL(); + + void StartThreadL(); + void ResetProperties(const TDesC &aProgress); + void PostProcessL(); + +private: + TUint iThreadsRun; // number of running threads + RThread iThread; //thread processing the crash + RArray iRemainingEvents; //copy of structures provided by target observer + RArray iRemainingFlashCrashEvents; + RArray iTids; + TCrashThreadParams iParams; + CCoreDumpSession &iCoreSess; + TUint iCrashCount; + RMessagePtr2 iMessage; +}; + +#endif //CORE_CRASH_HANDLER_H