31 // |
31 // |
32 TInt LaunchServer() |
32 TInt LaunchServer() |
33 { |
33 { |
34 LOG( "RLocationManager::LaunchServer begin" ); |
34 LOG( "RLocationManager::LaunchServer begin" ); |
35 |
35 |
36 TFindServer findLocServer( KLocServerName ); |
36 // DLL launch |
37 TFullName name; |
37 RProcess server; |
|
38 TInt ret = server.Create( KLocServerFileName, KNullDesC ); |
38 |
39 |
39 TInt result = findLocServer.Next( name ); |
40 if ( ret != KErrNone ) // Loading failed. |
40 if ( result == KErrNone ) |
|
41 { |
41 { |
42 LOG( "StartServer() - Server already running" ); |
42 return ret; |
43 |
|
44 // Server already running |
|
45 return KErrNone; |
|
46 } |
43 } |
47 |
44 |
48 RProcess server; |
45 TRequestStatus status( KErrNone ); |
49 result = server.Create( KLocServerFileName, KNullDesC ); |
46 server.Rendezvous( status ); |
50 if ( result != KErrNone ) |
47 |
51 { |
48 if ( status != KRequestPending ) |
52 LOG1( "CreateServerProcess() - failed to create server process, error: %d", result ); |
|
53 return result; |
|
54 } |
|
55 |
|
56 // Process created successfully |
|
57 TRequestStatus stat( KErrNone ); |
|
58 server.Rendezvous( stat ); |
|
59 |
|
60 if ( stat != KRequestPending ) |
|
61 { |
49 { |
62 LOG( "RLocationManager::LaunchServer Failed" ); |
50 LOG( "RLocationManager::LaunchServer Failed" ); |
63 server.Kill( 0 ); // Abort startup. |
51 server.Kill( 0 ); // Abort startup. |
64 } |
52 } |
65 else |
53 else |
66 { |
54 { |
67 server.Resume(); // Logon OK - start the server. |
55 server.Resume(); // Logon OK - start the server. |
68 } |
56 } |
69 |
57 |
70 User::WaitForRequest( stat ); // wait for start or death |
58 User::WaitForRequest( status ); // wait for start or death |
71 // we can't use the 'exit reason' if the server panicked as this |
59 // we can't use the 'exit reason' if the server panicked as this |
72 // is the panic 'reason' and may be '0' wehich cannot be distinguished |
60 // is the panic 'reason' and may be '0' wehich cannot be distinguished |
73 // from KErrNone |
61 // from KErrNone |
74 result = ( server.ExitType() == EExitPanic ) ? KErrCommsBreak : stat.Int(); |
62 ret = ( server.ExitType() == EExitPanic ) ? KErrCommsBreak : status.Int(); |
75 server.Close(); |
63 server.Close(); |
76 |
|
77 LOG( "RLocationManager::LaunchServer end" ); |
64 LOG( "RLocationManager::LaunchServer end" ); |
78 |
65 return ret; |
79 return result; |
|
80 } |
66 } |
81 |
67 |
82 // -------------------------------------------------------------------------- |
68 // -------------------------------------------------------------------------- |
83 // RLocationManager::RLocationManager |
69 // RLocationManager::RLocationManager |
84 // C++ Constructor |
70 // C++ Constructor |