summaryrefslogtreecommitdiff
path: root/server/alarm-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/alarm-manager.c')
-rw-r--r--server/alarm-manager.c30
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(&current_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(&current_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();