diff -r 50de4d668bb6 -r 82c0024438c8 locationmanager/client/src/rlocationmanager.cpp --- 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; } // --------------------------------------------------------------------------