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