qthighway/xqserviceutil/src/xqservicemanager.cpp
changeset 26 3d09643def13
parent 24 9d760f716ca8
child 27 6bfad47013df
--- a/qthighway/xqserviceutil/src/xqservicemanager.cpp	Thu Sep 02 21:20:48 2010 +0300
+++ b/qthighway/xqserviceutil/src/xqservicemanager.cpp	Fri Sep 17 08:34:25 2010 +0300
@@ -46,13 +46,13 @@
 #include "xqconversions.h"
 
 
-#define TIMER_DELAY 3000
+#define TIMER_DELAY 3000000 // 3000000 microseconds == 3s
 
 class CProcessInfo : public CActive
     {
     public:
         static void AddProcessL(const TUid& appUid, RProcess& appProcess);
-        static void EnsureProcessCanStartL(const TUid& appUid);
+        static bool EnsureProcessCanStartL(const TUid& appUid);
         
     protected:
         CProcessInfo(const TUid& appUid);
@@ -111,14 +111,14 @@
     CleanupStack::Pop(self);
 }
 
-void CProcessInfo::EnsureProcessCanStartL(const TUid& appUid)
+bool CProcessInfo::EnsureProcessCanStartL(const TUid& appUid)
 {
     XQSERVICE_DEBUG_PRINT("CProcessInfo::EnsureProcessCanStartL");
+  
+    bool ret = true;
     
     CProcessInfo* previousProcess = iProcessInfoMap.map[appUid.iUid];
     if (previousProcess) {
-        previousProcess->Cancel();
-        
         // Timer is for ensure that wait will end. 
         // Maybe there is possibility that destroing process notification could be lost.
         RTimer securityTimer;
@@ -129,10 +129,14 @@
         securityTimer.After(timerStatus, TIMER_DELAY);
         User::WaitForRequest(previousProcess->iStatus, timerStatus);
         
+        if (previousProcess->iStatus == KRequestPending)
+            ret = false;
+        
         CleanupStack::PopAndDestroy();
         delete previousProcess;
         iProcessInfoMap.map.remove(appUid.iUid);
     }
+    return ret;
 }
 
 void CProcessInfo::RunL()
@@ -493,7 +497,8 @@
             }
         }
         else {
-            CProcessInfo::EnsureProcessCanStartL(uid);
+            if(!CProcessInfo::EnsureProcessCanStartL(uid))
+                User::Leave(KErrAlreadyExists);
         }
         TRequestStatus requestStatusForRendezvous;