diff -r e8c1ea2c6496 -r 8758140453c0 lbs/internal/lbstestserver/src/claunchedprocess.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lbs/internal/lbstestserver/src/claunchedprocess.cpp Thu Jan 21 12:53:44 2010 +0000 @@ -0,0 +1,172 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "lbsmemlogger.h" +#include "claunchedprocess.h" +#include "csecureprocessasbase.h" + + +/** Create instance of trap handler and cleanup stack +called by the launched process! + +@return Symbian error code +@internalTechnology +@released + */ + TInt CLaunchedProcess::CompleteProcessLaunch() + { + __UHEAP_MARK; + CTrapCleanup* cleanup=CTrapCleanup::New(); + TInt r=KErrNoMemory; + if (cleanup) + { + TRAP(r,DoCompleteProcessLaunchL()); + delete cleanup; + } + __UHEAP_MARKEND; + return r; + + } + + +/** Create the server process, create, install and run the active scheduler +wait for scheduler to be stopped to return process + +@return Symbian error code +@internalTechnology +@released + */ + TInt CLaunchedProcess::DoCompleteProcessLaunchL() + { + TInt r = KErrNone; + // create and install the active scheduler we need + CSecureProcessASBase* s=new(ELeave) CSecureProcessASBase(); + CleanupStack::PushL(s); + CActiveScheduler::Install(s); + + // Create the memory logger object for monitoring memory + LBSMEMLOG_BEGIN(); + + CBase* baseObj = s->CreateRootObjectL(); + + CleanupStack::PushL(baseObj); + + r = s->EntryPointL(baseObj); + + RProcess().Rendezvous(KErrNone); + + // Ready to run + CActiveScheduler::Start(); + + // + // Cleanup the client + CleanupStack::PopAndDestroy(1); + + // Cleanup the mem logger + LBSMEMLOG_END(); + + // + // do any _FINAL _ operations. If anything.. default does nothing + s->Final(); + // Cleanup the scheduler + CleanupStack::PopAndDestroy(s); + return r; + } + + +/** Create instance of trap cleanup stack and the process by specified parameters + +@param aParams A reference to TProcessStartParams object +@return Symbian error code +@see TProcessStartParams +@internalTechnology +@released + */ + TInt CLaunchedProcess::CompleteProcessLaunch(TProcessStartParams& aParams) + { + __UHEAP_MARK; + CTrapCleanup* cleanup=CTrapCleanup::New(); + TInt r=KErrNoMemory; + if (cleanup) + { + TRAP(r,DoCompleteProcessLaunchL(aParams)); + delete cleanup; + } + __UHEAP_MARKEND; + return r; + + } + +/** Create the server process by specified parameters, create, install and run the active scheduler +wait for scheduler to be stopped to return process + +@param aParams A reference to TProcessStartParams object +@return Symbian error code +@see TProcessStartParams +@internalTechnology +@released + */ + TInt CLaunchedProcess::DoCompleteProcessLaunchL(TProcessStartParams& aParams) + { + // first check that we are about to create the right type of server + if(aParams.GetType() != KProcessStartParamsTypeUid) + { + // this is not a process type that we understand. Has the caller + // pass TServerStartParams by mistake? + User::Leave(KErrArgument); // this aborts the server startup + } + + // rename our main thread + User::LeaveIfError(User::RenameThread(aParams.GetProcessName())); + + TInt r = KErrNone; + // create and install the active scheduler we need + CSecureProcessASBase* s=new(ELeave) CSecureProcessASBase(); + CleanupStack::PushL(s); + CActiveScheduler::Install(s); + + // Create the memory logger object for monitoring memory + LBSMEMLOG_BEGIN(); + + CBase* baseObj = s->CreateRootObjectL(); + + CleanupStack::PushL(baseObj); + + r = s->EntryPointL(baseObj); + + // is the process that started us interested in known that we are alive and well + if(aParams.GetRendezvousRequired()) + { + // tell any starting process that we have started successfully and are + // now ready to receieve mesages or process events + RProcess::Rendezvous(KErrNone); + } + // Ready to run + CActiveScheduler::Start(); + // + // Cleanup the client + CleanupStack::PopAndDestroy(1); + + // Cleanup the mem logger + LBSMEMLOG_END(); + + // + // do any _FINAL _ operations. If anything.. default does nothing + s->Final(); + // Cleanup the scheduler + CleanupStack::PopAndDestroy(s); + return r; + } +