[systemd-devel] [PATCH] timer: reenable TIMER_ACTIVE timers when restarted

2014-11-06 Thread Michael Chapman
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.
---
 src/core/timer.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/src/core/timer.c b/src/core/timer.c
index a3713e2..5c4e9f9 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;
 
-- 
2.1.0

___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] [PATCH] timer: reenable TIMER_ACTIVE timers when restarted

2014-11-06 Thread Lennart Poettering
On Thu, 06.11.14 19:47, Michael Chapman (m...@very.puzzling.org) wrote:

Makes sense! Applied!

 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.
 ---
  src/core/timer.c | 6 ++
  1 file changed, 6 insertions(+)
 
 diff --git a/src/core/timer.c b/src/core/timer.c
 index a3713e2..5c4e9f9 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;
  
 -- 
 2.1.0
 
 ___
 systemd-devel mailing list
 systemd-devel@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel