diff -r 0a57f2fb63b1 -r 557e19da7faf videoscheduler/SchedulerServer/src/CCseSchedulerLandLord.cpp --- a/videoscheduler/SchedulerServer/src/CCseSchedulerLandLord.cpp Wed Aug 18 10:48:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,377 +0,0 @@ -/* -* Copyright (c) 2006 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 "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: Timer for the notifier* -*/ - - - - -#include "CCseSchedulerLandLord.h" -#include "CCseSchedulerPluginStarter.h" -#include -#include "CCseSchedulerThreadPacket.h" -#include // Observer for informing engine -#include -#include "CseDebug.h" // Debug macros -#include "CCseSemaphoreController.h" - -_LIT( KCseUniThreadName, "CseThread" ); -_LIT( KCseLine, "-" ); - -// ============================ MEMBER FUNCTIONS =============================== - -// --------------------------------------------------------------------------- -// CCseSchedulerTimer::CCseSchedulerTimer() -// -// --------------------------------------------------------------------------- -CCseSchedulerLandLord::CCseSchedulerLandLord( MCseScheduleObserver* aObserver ) : - CActive( CActive::EPriorityStandard ), - iThreadRunning( EFalse ), - iTakedownRequested( EFalse ) - - { - CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerLandLord::CCseSchedulerLandLord"); - - // C++ default constructor - iObserver = aObserver; - - CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerLandLord::~CCseSchedulerLandLord"); - - Cancel(); - - delete iShutdownCompleteMonitor; - iShutdownCompleteMonitor = NULL; - delete iActiveSchedulerWait; - iActiveSchedulerWait = NULL; - iObserver = NULL; - delete iThreadPacket; - iThreadPacket = NULL; - delete iThreadName; - - CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerLandLord::NewL"); - - // Symbian C++ constructor - CCseSchedulerLandLord* self = new ( ELeave ) CCseSchedulerLandLord( aObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( ); - - CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerLandLord::ConstructL"); - - iActiveSchedulerWait = new (ELeave) CActiveSchedulerWait; - CActiveScheduler::Add( this ); - - CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerLandLord::DoCancel" ); - - if ( iThreadRunning ) - { - CSELOGSTRING_HIGH_LEVEL( - "CCseSchedulerLandLord::DoCancel Canceling thread" ); - - // Signal thread to die away! - iPluginShutdownSemaphore.Signal(); - - iThreadRunning = EFalse; - - // Complete schedule with KErrAbort - TRAP_IGNORE( iObserver->ScheduleCompletedL( - iThreadPacket->Schedule( )->DbIdentifier(), KErrAbort ) ); - } - - CSELOGSTRING_HIGH_LEVEL( "<<>>CCseSchedulerLandLord::RunL"); - - iThreadRunning = EFalse; - - // In case we have not cancelled operation, complete schedule with result code. - // If we have cancelled it, we're not interested about the result as the - // schedule has already been removed from the DB - if( !iTakedownRequested ) - { - iObserver->ScheduleCompletedL( iThreadPacket->Schedule( )->DbIdentifier(), - iThreadPacket->ResultCode( ) ); - } - CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerLandLord::SetSchedule"); - - delete iThreadPacket; - iThreadPacket = NULL; - iThreadPacket = CCseSchedulerThreadPacket::NewL(); - iThreadPacket->SetScheduleL( aData ); - - CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerLandLord::Schedule"); - CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerLandLord::RunError"); - // ATM there isn't leaving code in RunL so we just cancel timer if it is active. - Cancel(); - // Return KErrNone to avoid crash. - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CCseSchedulerLandLord::GenerateThreadName -// Generates "unique" name for thread -// ----------------------------------------------------------------------------- -// -void CCseSchedulerLandLord::GenerateThreadNameL( ) - { - CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerLandLord::GenerateThreadName"); - - delete iThreadName; - iThreadName = NULL; - iThreadName = KCseUniThreadName().AllocL(); - iThreadName = iThreadName->ReAllocL( - iThreadName->Size() + // Length of original name. - sizeof( TUint32 ) * 2 + // Space for Plugin Uid and DbIdentifier - 2 ); // Two "-" as a separator between - // Uid and identifier - - // Separator - iThreadName->Des( ).Append( KCseLine ); - - // Plugin uid - iThreadName->Des( ).AppendNum( iThreadPacket->Schedule()->PluginUid() ); - - // Separator - iThreadName->Des( ).Append( KCseLine ); - - // Finally schedule identifier to make thread name unique - iThreadName->Des( ).AppendNum( iThreadPacket->Schedule()->DbIdentifier() ); - - CSELOGSTRING_HIGH_LEVEL("<<SetShutdownSemaphore( iPluginShutdownSemaphore ); - - iPluginShutdownCompleteSemaphore.CreateLocal( 0 ); - iThreadPacket->SetShutdownCompleteSemaphore( iPluginShutdownCompleteSemaphore ); - } - -// ----------------------------------------------------------------------------- -// CCseSchedulerLandLord::RunPluginL -// From CActive, called when RunL leaves. -// ----------------------------------------------------------------------------- -// -void CCseSchedulerLandLord::RunPluginL( ) - { - CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerLandLord::RunPluginL"); - TInt error( KErrNone ); - - // Create semaphores for shutdown signalling - GenerateSemaphoresL(); - - // First we create unique thread name - GenerateThreadNameL( ); - - // Create thread where to run schedule - error = iThread.Create( *iThreadName, - CCseSchedulerPluginStarter::StartThread, - KDefaultStackSize, - NULL, // uses caller thread's heap - iThreadPacket, // Schedule - EOwnerThread ); - - if( error == KErrNone ) - { - // Creation succesfull, start running it and logon on it. - CSELOGSTRING_HIGH_LEVEL( - "CCseSchedulerLandLord::RunPluginL - Thread creation succesfull"); - iThread.Resume(); - iThread.Logon( iStatus ); - SetActive(); - iThreadRunning = ETrue; - } - else - { - CSELOGSTRING2_HIGH_LEVEL( - "CCseSchedulerLandLord::RunPluginL - Thread creation FAILED: %d", - error); - } - - CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerLandLord::ActiveWait()"); - if (aStart) - { - if(!iActiveSchedulerWait->IsStarted()) - { - CSELOGSTRING_HIGH_LEVEL("CCseSchedulerLandLord::ActiveWait - Wait start"); - iActiveSchedulerWait->Start(); - } - } - else - { - if(iActiveSchedulerWait->IsStarted()) - { - CSELOGSTRING_HIGH_LEVEL("CCseSchedulerLandLord::ActiveWait - Wait stop"); - iActiveSchedulerWait->AsyncStop(); - } - } - CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerLandLord::ShutdownPlugin()"); - - ActiveWait( EFalse ); - - CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerLandLord::ClearL"); - - if( iThreadRunning ) - { - // Flag the takedown. We're cancelling the operation, so we have - // no interest about result code as the schedule has already - // been removed from the DB. - iTakedownRequested = ETrue; - - // Signal thread to die away! - iPluginShutdownSemaphore.Signal(); - - if( !iShutdownCompleteMonitor ) - { - CSELOGSTRING_HIGH_LEVEL("CCseSchedulerLandLord::ClearL - New semaphore monitor" ); - iShutdownCompleteMonitor = CCseSemaphoreController::NewL( iPluginShutdownCompleteSemaphore, *this ); - } - - CSELOGSTRING_HIGH_LEVEL("CCseSchedulerLandLord::ClearL - StartMonitor" ); - iShutdownCompleteMonitor->Start(); - - ActiveWait( ETrue ); - - iThreadRunning = EFalse; - } - - CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerLandLord::IsWorking()"); - - CSELOGSTRING2_HIGH_LEVEL("<<