summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Chapman <mike@very.puzzling.org>2014-11-06 19:47:02 +1100
committerLennart Poettering <lennart@poettering.net>2014-11-07 01:19:56 +0100
commit779042e772d2459f7649b34a164902dc456f1bab (patch)
tree2517a9ea6c2416ebd294049b9b9b16c78536c16d
parentf32d2db140150b9d38684a699c9875b6e24ca27c (diff)
timer: reenable TIMER_ACTIVE timers when restarted
A timer configured with OnActiveSec will start its associated unit again if the timer is stopped, then started. However, if the timer unit is restarted -- with "systemctl restart", say -- this does not occur. This commit ensures that TIMER_ACTIVE timers are re-enabled whenever the timer is started, even if that's within a restart job.
-rw-r--r--src/core/timer.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/core/timer.c b/src/core/timer.c
index a3713e2140..5c4e9f995a 100644
--- a/src/core/timer.c
+++ b/src/core/timer.c
@@ -521,6 +521,7 @@ fail:
static int timer_start(Unit *u) {
Timer *t = TIMER(u);
+ TimerValue *v;
assert(t);
assert(t->state == TIMER_DEAD || t->state == TIMER_FAILED);
@@ -530,6 +531,11 @@ static int timer_start(Unit *u) {
t->last_trigger = DUAL_TIMESTAMP_NULL;
+ /* Reenable all timers that depend on unit activation time */
+ LIST_FOREACH(value, v, t->values)
+ if (v->base == TIMER_ACTIVE)
+ v->disabled = false;
+
if (t->stamp_path) {
struct stat st;