diff -r 9d760f716ca8 -r 3d09643def13 qthighway/xqserviceutil/src/xqservicemanager.cpp --- 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;