taskswitcher/client/s60/src/tssession.cpp
changeset 124 e36b2f4799c0
parent 121 0b3699f6c654
equal deleted inserted replaced
121:0b3699f6c654 124:e36b2f4799c0
    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 (;;) {