Fix alarm defect for applaunch based logic.
authorHokwon Song <hokwon.song@samsung.com>
Mon, 21 Oct 2013 07:26:16 +0000 (16:26 +0900)
committerHokwon Song <hokwon.song@samsung.com>
Mon, 21 Oct 2013 07:26:16 +0000 (16:26 +0900)
Change-Id: Ibc7ce3c99801af240244fb8cb714811d3557a197
Signed-off-by: Hokwon Song <hokwon.song@samsung.com>
src/system/FSys_AlarmManager.cpp
src/system/FSys_RuntimeInfoImpl.cpp
src/system/inc/FSys_AlarmManager.h

index 7ddeb62..bf61df0 100644 (file)
@@ -86,6 +86,29 @@ _AlarmManager::~_AlarmManager()
        alarm_cancel_all();
 }
 
+int alarm_callback(alarm_id_t alarmId, void *user_param)
+{
+       _AlarmManager* pAlarmManager = _AlarmManager::GetInstance();
+       pAlarmManager->OnAlarmExpired((int)alarmId);
+        return 0;
+}
+
+result
+_AlarmManager::Construct(void)
+{
+       int errorCode;
+       Tizen::App::App* pApp = null;
+       pApp = Tizen::App::App::GetInstance();
+       String appId = pApp->GetAppId();
+       std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
+
+       errorCode = alarmmgr_init(pAppId.get());
+       SysTryReturnResult(NID_SYS, errorCode == ALARMMGR_RESULT_SUCCESS, E_SYSTEM, "It is failed to init alarmmgr. error [%d]", errorCode);
+       errorCode = alarmmgr_set_cb(alarm_callback, null);
+       SysTryReturnResult(NID_SYS, errorCode == ALARMMGR_RESULT_SUCCESS, E_SYSTEM, "It is failed to set cb to alarmmgr. error [%d]", errorCode);
+       return E_SUCCESS;
+}
+
 _AlarmManager*
 _AlarmManager::GetInstance(void)
 {
@@ -100,11 +123,13 @@ _AlarmManager::GetInstance(void)
 void
 _AlarmManager::InitSingleton(void)
 {
-       _AlarmManager* pAlarmManager = new (std::nothrow) _AlarmManager();
+       result r = E_SUCCESS;
+       std::unique_ptr<_AlarmManager> pAlarmManager(new (std::nothrow) _AlarmManager());
        SysTryReturnVoidResult(NID_SYS, pAlarmManager, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.",
                                                   GetErrorMessage(E_OUT_OF_MEMORY));
-
-       __pAlarmManager = pAlarmManager;
+       r = pAlarmManager->Construct();
+       SysTryReturnVoidResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to construct alarm manager.");
+       __pAlarmManager = pAlarmManager.release();
        std::atexit(DestroySingleton);
 }
 
@@ -163,7 +188,7 @@ _AlarmManager::ReserveAlarm(Tizen::Base::String appId, Tizen::Base::DateTime sta
        ret = alarmmgr_set_type(pAlarmInfo, ALARM_TYPE_NOLAUNCH);
        SysTryCatch(NID_SYS, ret == ALARMMGR_RESULT_SUCCESS, r = E_SYSTEM, r, "It is failed to set repeat mode");
 
-       ret = alarmmgr_add_alarm_appsvc_with_localtime(pAlarmInfo,(void *)pBundle, &reservedAlarmId);
+       ret = alarmmgr_add_alarm_with_localtime(pAlarmInfo, null, &reservedAlarmId);
        SysTryCatch(NID_SYS, ret == ALARMMGR_RESULT_SUCCESS, r = E_SYSTEM, r, "Alarm creation failed!!! Alrmgr error code is %d", ret);
 
 CATCH:
index 04a688b..b74a1c4 100644 (file)
@@ -397,11 +397,15 @@ _RuntimeInfoImpl::GetDirectorySize(const char* path)
 
        fileLength = strlen(appIdPath.get()) + 29;
        pFileName = (char*)malloc(fileLength);
+       SysTryCatch(NID_SYS, pFileName, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "It is not enough memory.");
+
        ret = sprintf(pFileName, "/tmp/size_of_directory_%s.tmp", appIdPath.get());
        SysTryCatch(NID_SYS, ret > 0, E_SYSTEM, E_SYSTEM, "It is failed to write file path.");
 
        commandLength = strlen(pFileName) + 8;
        pCommand = (char*) malloc(commandLength);
+       SysTryCatch(NID_SYS, pCommand, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "It is not enough memory.");
+
        ret = sprintf(pCommand, "rm -rf %s", pFileName);
        SysTryCatch(NID_SYS, ret > 0, E_SYSTEM, E_SYSTEM, "It is failed to write remove pCommand.");
 
@@ -415,6 +419,8 @@ _RuntimeInfoImpl::GetDirectorySize(const char* path)
 
        commandLength = strlen(pFileName) + strlen(path) + 16;
        pCommand = (char*)malloc(commandLength);
+       SysTryCatch(NID_SYS, pCommand, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "It is not enough memory.");
+
        ret = sprintf(pCommand, "du -skb -P %s >> %s", path, pFileName);
        SysTryCatch(NID_SYS, ret > 0, E_SYSTEM, E_SYSTEM, "It is failed to write du pCommand.");
 
@@ -440,7 +446,7 @@ CATCH:
        }
        if (pCommand)
        {
-               free(pFileName);
+               free(pCommand);
        }
        if (pFile)
        {
index 9fea083..66cc3eb 100644 (file)
@@ -33,9 +33,9 @@ class _AlarmManager
 {
 private:
        _AlarmManager();
-       ~_AlarmManager();
 
-public:        
+public:
+       ~_AlarmManager();
        result RegisterAlarm(_AlarmImpl* pAlarmImpl);
        result UnregisterAlarm(_AlarmImpl* pAlarmImpl);
        result UpdateAlarm(_AlarmImpl* pAlarmImpl);
@@ -45,6 +45,7 @@ public:
        static _AlarmManager* GetInstance(void);
 
 private:
+       result Construct(void);
        int ReserveAlarm(Tizen::Base::String appId, Tizen::Base::DateTime startTime, int period);
        result AddAlarmList(int alarmId, int period, Tizen::Base::String appId, Tizen::Base::DateTime* endTime);
        result RemoveAlarmList(int alarmId);