40 } while (--retry > 0); |
40 } while (--retry > 0); |
41 return error; |
41 return error; |
42 } |
42 } |
43 |
43 |
44 TInt RTsSession::StartServer() |
44 TInt RTsSession::StartServer() |
45 { |
45 { |
46 TInt error; |
|
47 |
|
48 RSemaphore semaphore; |
46 RSemaphore semaphore; |
49 error = semaphore.CreateGlobal(KTsServerReadySemaphore, 0); |
47 CleanupClosePushL(semaphore); |
50 |
48 TInt error = semaphore.OpenGlobal(KTsServerReadySemaphore); |
51 if (KErrNone == error || KErrAlreadyExists == error) { |
49 if (KErrNone != error) { |
52 RProcess server; |
50 RProcess server; |
|
51 CleanupClosePushL(server); |
53 error = server.Create(KRunningAppServerName, KNullDesC, TUidType(KNullUid, KNullUid, KRunningAppServerUid)); |
52 error = server.Create(KRunningAppServerName, KNullDesC, TUidType(KNullUid, KNullUid, KRunningAppServerUid)); |
54 if (KErrNone == error) { |
53 if (KErrNone == error) |
|
54 { |
55 TRequestStatus status; |
55 TRequestStatus status; |
56 server.Rendezvous(status); |
56 server.Rendezvous(status); |
57 |
57 if (status != KRequestPending) |
58 if (status != KRequestPending) { |
58 { |
59 server.Kill(0); |
59 server.Kill(0); |
60 User::WaitForRequest(status); |
60 User::WaitForRequest(status); |
61 } else { |
61 } |
|
62 else |
|
63 { |
62 server.Resume(); |
64 server.Resume(); |
63 User::WaitForRequest(status); |
65 User::WaitForRequest(status); |
64 |
66 } |
65 // wait for server |
67 |
66 semaphore.Wait(); |
68 if(KErrCancel == status.Int()) |
|
69 { |
|
70 error = KErrNone; |
|
71 } |
|
72 else |
|
73 { |
|
74 error = (EExitPanic == server.ExitType()) ? KErrGeneral : status.Int(); |
|
75 } |
67 } |
76 } |
68 |
77 CleanupStack::PopAndDestroy(&server); |
69 if (KErrCancel == status.Int()) { |
|
70 error = KErrNone; |
|
71 } else { |
|
72 error = (EExitPanic == server.ExitType()) ? KErrGeneral : status.Int(); |
|
73 } |
|
74 } |
78 } |
75 server.Close(); |
79 CleanupStack::PopAndDestroy(&semaphore); |
|
80 return error; |
76 } |
81 } |
77 semaphore.Close(); |
|
78 |
|
79 return error; |
|
80 } |
|
81 |
82 |
82 |
83 |
83 HBufC8* RTsSession::TasksContentLC() |
84 HBufC8* RTsSession::TasksContentLC() |
84 { |
85 { |
85 for (;;) { |
86 for (;;) { |