chiark / gitweb /
timer: recalculate next elapse for calendar timer units when the system clock is...
[elogind.git] / src / core / timer.c
index 54c0d0b33011f80a95e9cd52b06aafd3e830f53a..bd279704493861341ef78389fd3681b00d573afd 100644 (file)
@@ -527,6 +527,18 @@ static void timer_reset_failed(Unit *u) {
         t->result = TIMER_SUCCESS;
 }
 
+static void timer_time_change(Unit *u) {
+        Timer *t = TIMER(u);
+
+        assert(u);
+
+        if (t->state != TIMER_WAITING)
+                return;
+
+        log_info("%s: time change, recalculating next elapse.", u->id);
+        timer_enter_waiting(t, false);
+}
+
 static const char* const timer_state_table[_TIMER_STATE_MAX] = {
         [TIMER_DEAD] = "dead",
         [TIMER_WAITING] = "waiting",
@@ -582,6 +594,7 @@ const UnitVTable timer_vtable = {
         .timer_event = timer_timer_event,
 
         .reset_failed = timer_reset_failed,
+        .time_change = timer_time_change,
 
         .bus_interface = "org.freedesktop.systemd1.Timer",
         .bus_message_handler = bus_timer_message_handler,