fix LockManager to wait until LockManagerService is available.[N_SE-37935]
authorjungmin76.park <jungmin76.park@samsung.com>
Thu, 9 May 2013 10:35:54 +0000 (19:35 +0900)
committerjungmin76.park <jungmin76.park@samsung.com>
Thu, 9 May 2013 10:35:54 +0000 (19:35 +0900)
Change-Id: I31144c43993e28cb88848081b42243760c5202bf
Signed-off-by: jungmin76.park <jungmin76.park@samsung.com>
src/core/FShellLockManager.cpp
src/core/FShell_LockManagerImpl.cpp

index 0e46a37..df4bd25 100644 (file)
@@ -88,9 +88,8 @@ LockManager::Construct(void)
        SysAssert(__pLockManagerImpl == null);
 
        __pLockManagerImpl = _LockManagerImpl::GetInstance();
-
-       SysAssertf(__pLockManagerImpl, "Failed to construct _LockManagerImpl!!");
-       SysLog(NID_SHELL, "Successed.");
+       SysTryReturnResult(NID_SHELL, __pLockManagerImpl, E_SYSTEM, "[%s] Failed to construct _LockManagerImpl!!.");
+       SysLog(NID_SHELL, "LockManager is constructed.");
        return E_SUCCESS;
 }
 
index c325119..fc0c490 100644 (file)
@@ -23,6 +23,7 @@
 #include <vconf.h>
 #include <FBaseLog.h>
 #include <FBaseSysLog.h>
+#include <FBaseRt.h>
 #include <FShell_LockManagerImpl.h>
 #include <FShell_LockManagerProxy.h>
 
@@ -80,15 +81,29 @@ _LockManagerImpl::GetInstance()
 result
 _LockManagerImpl::Construct(void)
 {
-       result r = E_SUCCESS;
+       std::unique_ptr< _LockManagerProxy > pLockManagerProxy(new (std::nothrow) _LockManagerProxy);
+       SysTryReturnResult(NID_APP, pLockManagerProxy, E_OUT_OF_MEMORY, "The memory is insufficient.");
 
-       std::unique_ptr< _LockManagerProxy > pLockManager(new (std::nothrow) _LockManagerProxy);
-       SysTryReturnResult(NID_APP, pLockManager, E_OUT_OF_MEMORY, "The memory is insufficient.");
+       const int MAX_TRY_COUNT = 5;
+       const int TRY_SLEEP_TIME = 250;
 
-       r = pLockManager->Construct();
-       SysTryReturnResult(NID_APP, !IsFailed(r), r, "Propagating.");
+       int count = 0;
+       while (true)
+       {
+               result r = pLockManagerProxy->Construct();
+               if (r == E_SUCCESS)
+               {
+                       SysLog(NID_APP, "Succeeded in connecting lock manager service.");
+                       break;
+               }
+
+               SysTryReturn(NID_APP, count < MAX_TRY_COUNT, E_SYSTEM, r, "[%s] Failed to connect lock manager service.", GetErrorMessage(r));
+
+               count++;
+               Tizen::Base::Runtime::Thread::Sleep(TRY_SLEEP_TIME);
+       }
 
-       __pLockManager = pLockManager.release();
+       __pLockManager = pLockManagerProxy.release();
 
        return E_SUCCESS;
 }