diff -r 8118492f1bdf -r b70d77332e66 musichomescreen_multiview/mcpmusicplayer/src/applicationmonitor.cpp --- a/musichomescreen_multiview/mcpmusicplayer/src/applicationmonitor.cpp Thu Jan 07 12:45:53 2010 +0200 +++ b/musichomescreen_multiview/mcpmusicplayer/src/applicationmonitor.cpp Mon Jan 18 20:18:06 2010 +0200 @@ -87,6 +87,7 @@ TUint64 threadId(0); TBool taskExists(EFalse); TInt status = KErrNone; + iAppUid = aAppUid; if(aRootAppIndication) { CAknTaskList* taskList = CAknTaskList::NewL( wsSession ); @@ -131,22 +132,22 @@ MPX_DEBUG1("CApplicationMonitor::RunL <---"); switch (iStatus.Int()) { - case EExitKill: - case EExitTerminate: - case EExitPanic: - MPX_DEBUG1("CApplicationMonitor::RunL kill\terminate\panic"); - iObserver.HandleApplicationClosedL((TExitType) iStatus.Int()); + case EExitPending: + MPX_DEBUG1("CApplicationMonitor::RunL reason = EExitPending"); + iThread.Close(); + TRAPD(err, StartL( iAppUid ) ); + if (KErrNone != err) + { + MPX_DEBUG1("CApplicationMonitor::RunL reason = EExitPending but thread is really gone"); + iObserver.HandleApplicationClosedL((TExitType) iStatus.Int()); + } break; case KErrCancel: - case KErrNoMemory: - MPX_DEBUG1("CApplicationMonitor::RunL cancel\memory"); + MPX_DEBUG1("CApplicationMonitor::RunL cancel"); break; - case EExitPending: default: - MPX_DEBUG1("CApplicationMonitor::RunL exitpendin\default"); - // Listen again - iThread.Logon(iStatus); - SetActive(); + MPX_DEBUG2("CApplicationMonitor::RunL reason = %d", iStatus.Int()); + iObserver.HandleApplicationClosedL((TExitType) iStatus.Int()); break; } MPX_DEBUG1("CApplicationMonitor::RunL --->"); @@ -171,9 +172,6 @@ TInt CApplicationMonitor::RunError(TInt /*aError*/) { MPX_DEBUG1("CApplicationMonitor::RunError <---"); - // Listen again - iThread.Logon(iStatus); - SetActive(); MPX_DEBUG1("CApplicationMonitor::RunError --->"); return KErrNone; }