sl@0: // Copyright (c) 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 <e32std.h>
sl@0: #include <ecom/ecom.h>
sl@0: #include "MmfAudioPolicyServer.h"
sl@0: 
sl@0: _LIT(KMMFAudioPolicyServerName,"MMFAudioPolicyServer");
sl@0: 
sl@0: EXPORT_C TInt CMMFAudioPolicyServer::StartThread(TAny* aParms)
sl@0: /**
sl@0: Thread entry-point function.
sl@0: The TServerStart objects is passed as the thread parameter
sl@0: **/
sl@0: 	{
sl@0: 	TInt err = KErrNone;
sl@0: 	__UHEAP_MARK;
sl@0: 	//This line will be used if parameters need to be passed.
sl@0: 	TServerStart* start = reinterpret_cast<TServerStart*>(aParms);
sl@0: 	CTrapCleanup* cleanup = CTrapCleanup::New();
sl@0: 	if (!cleanup)
sl@0: 		{
sl@0: 		err = KErrNoMemory;
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		TRAP(err, StartThreadL(*start));
sl@0: 		}
sl@0: 	delete cleanup;
sl@0: 
sl@0: 	REComSession::FinalClose();
sl@0: 	__UHEAP_MARKEND;
sl@0: 	return err;
sl@0: 	}
sl@0: 
sl@0: void CMMFAudioPolicyServer::StartThreadL(TServerStart& aStart)
sl@0: 	{
sl@0: 	CActiveScheduler* sched = new(ELeave) CActiveScheduler;
sl@0: 	CleanupStack::PushL(sched);
sl@0: 	
sl@0: 	CActiveScheduler::Install(sched);
sl@0: 	//Rename Audio Policy server name
sl@0: 	RThread audioPolicyThread;
sl@0: 	TName name;
sl@0:     name.Append(KMMFAudioPolicyServerName);
sl@0: 	//We are ignoring the error code returned from User::RenameThread
sl@0: 	//as it is not important here, may be for profiling
sl@0: 	User::RenameThread(name);
sl@0: 	CMMFAudioPolicyServer* server = CMMFAudioPolicyServer::NewL();
sl@0: 	CleanupStack::PushL(server);
sl@0: 	
sl@0: 	aStart.iPolicyServerHandle = server->Server();
sl@0: 	// Sync with the client and enter the active scheduler
sl@0: 	RThread::Rendezvous(KErrNone);
sl@0: 	sched->Start();
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(2, sched); // sched, server
sl@0: 	}
sl@0: