diff options
Diffstat (limited to 'server/alarm-manager.c')
-rw-r--r-- | server/alarm-manager.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/server/alarm-manager.c b/server/alarm-manager.c index f67beda..b22345e 100644 --- a/server/alarm-manager.c +++ b/server/alarm-manager.c @@ -85,6 +85,7 @@ GHashTable *caller_appid_cache_table; bool is_time_changed = false; /* for calculating next duetime */ static time_t periodic_alarm_standard_time = 0; static bool using_rtc = false; +static bool is_rtc_reset = false; struct running_info_t { pid_t pid; @@ -315,6 +316,9 @@ static bool __set_time(time_t _time) LOGD("ALARM_SET_RTC ioctl is succeed. [%d]", (int)_time); strncpy(log_tag, "SET RTC START", sizeof(log_tag) - 1); _save_module_log(log_tag, log_message); + + if (!_set_latest_settime(_time)) + LOGE("DB is failed."); return true; } } else { @@ -588,7 +592,6 @@ 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 = false; is_time_changed = true; if (periodic_alarm_standard_time != 0) @@ -601,8 +604,7 @@ static void __alarm_update_due_time_of_all_items_in_list(time_t new_time, double if (base_info->alarm_type & ALARM_TYPE_RELATIVE) { /* case of RTC reset */ if (entry->base_info.mode.repeat == ALARM_REPEAT_MODE_ONCE) { - if ((entry->due_time + diff_time - new_time) > - (entry->due_time - entry->base_info.reserved_info)) { + if (is_rtc_reset) { LOGE("[ RTC reset]: new time %s %ld, diff %f, id %d duetime %s %ld %ld", ctime(&new_time), new_time, diff_time, entry->alarm_id, ctime(&entry->due_time), entry->due_time, @@ -615,9 +617,7 @@ static void __alarm_update_due_time_of_all_items_in_list(time_t new_time, double } else { entry->due_time += diff_time; - is_rtc_reset = false; - if ((entry->due_time - new_time) > base_info->mode.u_interval.interval) { - is_rtc_reset = true; + if (is_rtc_reset) { entry->due_time = new_time + ((entry->due_time - new_time) % base_info->mode.u_interval.interval); LOGE("[ RTC reset]: new time %s %ld, diff %f, id %d duetime %s %ld %ld", @@ -658,6 +658,12 @@ static void __alarm_update_due_time_of_all_items_in_list(time_t new_time, double _alarm_set_next_duetime(entry); } + if (is_rtc_reset) { + is_rtc_reset = false; + LOGW("RTC RESET -> RTC Normal"); + _save_module_log("[RTC NORMAL]", "RTC RESET -> NORMAL"); + } + time(¤t_time); for (iter = alarm_context.alarms; iter != NULL;) { @@ -3121,7 +3127,7 @@ void _alarm_initialize() #if !(GLIB_CHECK_VERSION(2, 36, 0)) g_type_init(); #endif - + time_t latest_settime; //For debug int expire_mode = ALARM_EXPIRE_MODE_NORMAL; vconf_get_int(VCONFKEY_ALARM_EXPIRE_MODE, &expire_mode); @@ -3166,6 +3172,16 @@ void _alarm_initialize() LOGE("power saving mode init failed"); exit(1); } + + if (_get_latest_settime(&latest_settime)) { + time_t current_time; + time(¤t_time); + if (current_time < latest_settime) { + LOGE("[RTC_RESET] RTC goes back into the past."); + _save_module_log("FAIL: RTC_RESET", "RTC goes back into the past."); + is_rtc_reset = true; + } + } } __initialize_alarm_list(); |