locationmanager/client/src/rlocationmanager.cpp
branchRCL_3
changeset 9 82c0024438c8
parent 8 50de4d668bb6
child 19 b73252188534
--- a/locationmanager/client/src/rlocationmanager.cpp	Wed Mar 31 22:19:07 2010 +0300
+++ b/locationmanager/client/src/rlocationmanager.cpp	Wed Apr 14 16:24:03 2010 +0300
@@ -32,12 +32,10 @@
 TInt LaunchServer()
     {
     LOG( "RLocationManager::LaunchServer begin" );
-    TParse parser;
-    parser.Set( KLocServerFileName, &KDC_PROGRAMS_DIR, NULL );
 
     // DLL launch
     RProcess server;
-    const TInt ret = server.Create( parser.FullName(), KNullDesC );
+    TInt ret = server.Create( KLocServerFileName, KNullDesC );
 
     if ( ret != KErrNone )  // Loading failed.
         {
@@ -51,18 +49,20 @@
         {
         LOG( "RLocationManager::LaunchServer Failed" );
         server.Kill( 0 );     // Abort startup.
-        server.Close();
-        return KErrGeneral;
         }
     else
         {
         server.Resume();    // Logon OK - start the server.
         }
         
-    User::WaitForRequest( status );
+    User::WaitForRequest( status ); // wait for start or death
+    // we can't use the 'exit reason' if the server panicked as this
+    // is the panic 'reason' and may be '0' wehich cannot be distinguished
+    // from KErrNone
+    ret = ( server.ExitType() == EExitPanic ) ? KErrCommsBreak : status.Int();
     server.Close();
     LOG( "RLocationManager::LaunchServer end" );
-    return status.Int();    
+    return ret;    
     }
 
 // --------------------------------------------------------------------------
@@ -82,17 +82,17 @@
 EXPORT_C TInt RLocationManager::Connect()
     {
     LOG( "RLocationManager::Connect(), begin" );
-    TInt ret = CreateSession( KLocServerName, Version(), KSessionSlotCount);
-    if ( ret != KErrNone )
+      
+    TInt error = LaunchServer();
+
+    if ( error == KErrNone || error == KErrAlreadyExists )
         {
-        ret = LaunchServer();
-        if ( ret == KErrNone )
-            {
-            ret = CreateSession( KLocServerName, Version() );    
-            }       
+        error = CreateSession( KLocServerName, Version(), KSessionSlotCount );
         }
+    
     LOG( "RLocationManager::Connect(), end" );
-    return ret;
+
+    return error;
     }
     
 // --------------------------------------------------------------------------