From 4fe220a47e197fa563158f7cda60d00a38f2fce4 Mon Sep 17 00:00:00 2001 From: Hokwon Song Date: Mon, 21 Oct 2013 16:26:16 +0900 Subject: [PATCH] Fix alarm defect for applaunch based logic. Change-Id: Ibc7ce3c99801af240244fb8cb714811d3557a197 Signed-off-by: Hokwon Song --- src/system/FSys_AlarmManager.cpp | 33 +++++++++++++++++++++++++++++---- src/system/FSys_RuntimeInfoImpl.cpp | 8 +++++++- src/system/inc/FSys_AlarmManager.h | 5 +++-- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/system/FSys_AlarmManager.cpp b/src/system/FSys_AlarmManager.cpp index 7ddeb62..bf61df0 100644 --- a/src/system/FSys_AlarmManager.cpp +++ b/src/system/FSys_AlarmManager.cpp @@ -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 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: diff --git a/src/system/FSys_RuntimeInfoImpl.cpp b/src/system/FSys_RuntimeInfoImpl.cpp index 04a688b..b74a1c4 100644 --- a/src/system/FSys_RuntimeInfoImpl.cpp +++ b/src/system/FSys_RuntimeInfoImpl.cpp @@ -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) { diff --git a/src/system/inc/FSys_AlarmManager.h b/src/system/inc/FSys_AlarmManager.h index 9fea083..66cc3eb 100644 --- a/src/system/inc/FSys_AlarmManager.h +++ b/src/system/inc/FSys_AlarmManager.h @@ -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); -- 2.7.4