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.
This commit is contained in:
Michael Chapman 2014-11-06 19:47:02 +11:00 committed by Lennart Poettering
parent f32d2db140
commit 779042e772
1 changed files with 6 additions and 0 deletions

View File

@ -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;