summaryrefslogtreecommitdiff
path: root/alarm-manager-schedule.c
diff options
context:
space:
mode:
authorInkyun Kil <inkyun.kil@samsung.com>2015-08-04 13:56:41 +0900
committerinkyun.kil <inkyun.kil@samsung.com>2015-11-25 17:34:31 +0900
commitc7783ce4407e03d4a74a0d2f04b226ff0692f91b (patch)
treedbcb22356fef74fac22241bb273e5d481b0b792c /alarm-manager-schedule.c
parent96c00b0c119c609e13475fe92786749bf8749869 (diff)
downloadalarm-manager-c7783ce4407e03d4a74a0d2f04b226ff0692f91b.tar.gz
alarm-manager-c7783ce4407e03d4a74a0d2f04b226ff0692f91b.tar.bz2
alarm-manager-c7783ce4407e03d4a74a0d2f04b226ff0692f91b.zip
Change standard point of start time for periodic alarm
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com> Conflicts: alarm-manager-schedule.c alarm-manager.c include/alarm-internal.h Change-Id: I39199e101d56eb89ac818e871e83af112942e3da
Diffstat (limited to 'alarm-manager-schedule.c')
-rw-r--r--alarm-manager-schedule.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/alarm-manager-schedule.c b/alarm-manager-schedule.c
index 275a807..5b6f395 100644
--- a/alarm-manager-schedule.c
+++ b/alarm-manager-schedule.c
@@ -230,7 +230,17 @@ static time_t __alarm_next_duetime_repeat(__alarm_info_t *__alarm_info)
duetime_tm.tm_mday = start->day;
duetime_tm.tm_isdst = -1;
- due_time = mktime(&duetime_tm);
+ if (alarm_info->alarm_type & ALARM_TYPE_PERIOD &&
+ alarm_info->mode.u_interval.interval > 0) {
+ /* For minimize 'while loop'
+ * Duetime should be "periodic_standard_time + (interval * x) >= current" */
+ time_t periodic_standard_time = _get_periodic_alarm_standard_time();
+ time_t temp;
+ temp = (current_time - periodic_standard_time) / alarm_info->mode.u_interval.interval;
+ due_time = periodic_standard_time + (temp * alarm_info->mode.u_interval.interval);
+ } else {
+ due_time = mktime(&duetime_tm);
+ }
while (__alarm_info->start > due_time || current_time > due_time || ((!is_time_changed) && (current_time == due_time))) {
due_time += alarm_info->mode.u_interval.interval;