idlefw/hslaunch/src/hslaunch.cpp
branchRCL_3
changeset 130 67f2ed48ad91
parent 122 6cadd6867c17
--- a/idlefw/hslaunch/src/hslaunch.cpp	Wed Sep 15 12:32:36 2010 +0300
+++ b/idlefw/hslaunch/src/hslaunch.cpp	Wed Oct 13 14:53:46 2010 +0300
@@ -21,6 +21,7 @@
 
 // ========================= DECLARATIONS ==================================
 _LIT( KHsExeName, "homescreen.exe" );
+_LIT( KHsProcessName, "Home screen" );
 const TInt KSleepOnRetry = 250000; // 250ms
 const TUid KPSCategoryUid = TUid::Uid( 0x200286E3 );
 const TInt KPSCrashCountKey = 1;
@@ -185,11 +186,17 @@
 // -----------------------------------------------------------------------------
 //
 void CHsLaunch::RunL()
-    {        
-    // Create process
+    {    
+    // Create app or connect to existing.
+    TInt processExisted = EFalse;
+    
     RProcess process;
-    TInt processError = KErrNone;    
-    processError = process.Create( KHsExeName, KNullDesC );
+    TInt processError = process.Create( KHsExeName, KNullDesC );
+    if( processError == KErrAlreadyExists )
+        {        
+        processError = process.Open( KHsProcessName, EOwnerProcess );
+        processExisted = ETrue;
+        }
     
     TInt monitorError = KErrNone;
     if( processError == KErrNone )
@@ -197,7 +204,8 @@
         TRAP( monitorError, InitProcessMonitorL( process.Id() ) );
         }
     
-    if( processError == KErrNone )
+    if( processError == KErrNone &&
+        !processExisted )
         {
         // Make sure process is started even if monitor startup
         // fails. This will assure that process is not left in