diff -r bdf78597b41c -r 5af11d9814f5 videoscheduler/SchedulerServer/src/CCseSchedulerServerEngine.cpp --- a/videoscheduler/SchedulerServer/src/CCseSchedulerServerEngine.cpp Tue Jan 26 12:55:56 2010 +0200 +++ b/videoscheduler/SchedulerServer/src/CCseSchedulerServerEngine.cpp Thu Nov 04 11:29:04 2010 +0200 @@ -56,6 +56,16 @@ // None. // ============================ MEMBER FUNCTIONS =============================== +// ----------------------------------------------------------------------------- +// CloseEngine +// CB method used if ConstructL leaves. Just calls Close to initiate proper +// shutdown sequence +// ----------------------------------------------------------------------------- +// +void CloseEngine( TAny* aPtr ) + { + static_cast( aPtr )->Close(); + } // ----------------------------------------------------------------------------- // CCseSchedulerServerEngine::CCseSchedulerServerEngine @@ -79,10 +89,10 @@ { CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerEngine::NewL"); - CCseSchedulerServerEngine* self = new( ELeave ) CCseSchedulerServerEngine( aServer ); - CleanupStack::PushL( self ); + CCseSchedulerServerEngine* self = new( ELeave ) CCseSchedulerServerEngine( aServer ); + CleanupStack::PushL( TCleanupItem( CloseEngine, self ) ); self->ConstructL(); - CleanupStack::Pop( self ); + CleanupStack::Pop( ); // CleanupItem CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerServerEngine::ConstructL"); - + CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerEngine::ConstructL"); + iDb = CCseScheduleDB::NewL(); iCompletitionBreaker = CIdle::NewL( CActive::EPriorityLow ); - + CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerServerEngine::~CCseSchedulerServerEngine"); - + delete iDb; iPluginControllerArray.ResetAndDestroy(); iPluginControllerArray.Close(); - delete iCompletitionBreaker; - + delete iCompletitionBreaker; + CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerServerEngine::IsSchedulerActive"); + CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerEngine::Close"); while( AccessCount() >= 1 ) { Dec(); } - CSELOGSTRING_HIGH_LEVEL("<<