diff options
author | Inkyun Kil <inkyun.kil@samsung.com> | 2019-09-18 10:34:01 +0900 |
---|---|---|
committer | Inkyun Kil <inkyun.kil@samsung.com> | 2019-09-18 18:34:47 +0900 |
commit | f6b9eee99841987ec6ca797499907391b1745742 (patch) | |
tree | 69bd3e56b80978f1e8ca49726223e0734b2fb32b | |
parent | 7b768f426b3becd204977db1da5a0ccc4d8dca88 (diff) | |
download | alarm-manager-f6b9eee99841987ec6ca797499907391b1745742.tar.gz alarm-manager-f6b9eee99841987ec6ca797499907391b1745742.tar.bz2 alarm-manager-f6b9eee99841987ec6ca797499907391b1745742.zip |
Remove outdated alarms
- When system time is changed or alarm is outdated unintentionally,
some alarms should be removed
Change-Id: I14a67fe86f08c636df65b073569f517e9300f1e9
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com>
-rw-r--r-- | server/alarm-manager-schedule.c | 22 | ||||
-rwxr-xr-x | server/alarm-manager.c | 24 |
2 files changed, 42 insertions, 4 deletions
diff --git a/server/alarm-manager-schedule.c b/server/alarm-manager-schedule.c index a18c068..a353e00 100644 --- a/server/alarm-manager-schedule.c +++ b/server/alarm-manager-schedule.c @@ -24,6 +24,8 @@ #include"alarm.h" #include"alarm-internal.h" +#include"alarm-manager-db.h" +#include"alarm-manager-util.h" #define DST_TIME_DIFF 1 @@ -478,7 +480,25 @@ static bool __find_next_alarm_to_be_scheduled(time_t *min_due_time) if (interval < 0) /*When the alarm expires, it may makes an error.*/ { LOGW("The duetime of alarm(%d) is OVER.", entry->alarm_id); - continue; + + _alarm_set_next_duetime(entry); + if (entry->due_time < current_time) { + const char *dst = entry->callee_pkgid ? entry->callee_pkgid : entry->dst_service_name; + LOGW("The alarm(%d) is removed [unique_name : %s, dst : %s", + entry->alarm_id, entry->app_unique_name, dst); + + if (!(entry->alarm_info.alarm_type & ALARM_TYPE_VOLATILE)) + _delete_alarms(entry->alarm_id); + + _save_alarm_info_log("AUTO_DELETE", entry); + + alarm_context.alarms = g_slist_remove(alarm_context.alarms, iter->data); + _release_alarm_info_t(entry); + continue; + } else { + due_time = entry->due_time; + } + } interval = difftime(due_time, min_time); diff --git a/server/alarm-manager.c b/server/alarm-manager.c index 9dd3baa..a5c5469 100755 --- a/server/alarm-manager.c +++ b/server/alarm-manager.c @@ -658,7 +658,7 @@ static void __alarm_update_due_time_of_all_items_in_list(time_t new_time, double __alarm_info_t *entry = NULL; struct tm *p_time = NULL; struct tm due_time_result; - bool is_rtc_reset; + bool is_rtc_reset = false; is_time_changed = true; if (periodic_alarm_standard_time != 0) @@ -744,8 +744,26 @@ static void __alarm_update_due_time_of_all_items_in_list(time_t new_time, double interval = difftime(due_time, current_time); if (interval < 0) { - LOGE("The duetime of alarm(%d) is OVER.", entry->alarm_id); - continue; + LOGW("The duetime of alarm(%d) is OVER.", entry->alarm_id); + + _alarm_set_next_duetime(entry); + if (entry->due_time < current_time) { + const char *dst = entry->callee_pkgid ? entry->callee_pkgid : entry->dst_service_name; + LOGW("The alarm(%d) is removed [unique_name : %s, dst : %s", + entry->alarm_id, entry->app_unique_name, dst); + + if (!(entry->alarm_info.alarm_type & ALARM_TYPE_VOLATILE)) + _delete_alarms(entry->alarm_id); + + _save_alarm_info_log("AUTO_DELETE", entry); + + alarm_context.alarms = g_slist_remove(alarm_context.alarms, iter->data); + _release_alarm_info_t(entry); + continue; + } else { + due_time = entry->due_time; + } + } interval = difftime(due_time, min_time); |