aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-03-29 13:01:35 -0400
committerKevin O'Connor <kevin@koconnor.net>2017-03-30 10:57:35 -0400
commit2b735daae5fb5e2d0ae0cadd4da8b2715989d6d2 (patch)
treee0c76ccced7fe47523df182c026abad9a0ff0464
parentf8b0c884b0baf7743dd9ebd02e933a754f0a8478 (diff)
downloadkutter-2b735daae5fb5e2d0ae0cadd4da8b2715989d6d2.tar.gz
kutter-2b735daae5fb5e2d0ae0cadd4da8b2715989d6d2.tar.xz
kutter-2b735daae5fb5e2d0ae0cadd4da8b2715989d6d2.zip
timer: Make sure to reset the timer repeat checks on a shutdown
Reset the timer repeat checks on shutdown, otherwise it is possible to get into an infinite shutdown loop. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--src/avr/timer.c19
-rw-r--r--src/generic/timer.c7
2 files changed, 17 insertions, 9 deletions
diff --git a/src/avr/timer.c b/src/avr/timer.c
index 588669c1..e9ec8dd0 100644
--- a/src/avr/timer.c
+++ b/src/avr/timer.c
@@ -95,15 +95,6 @@ timer_init(void)
}
DECL_INIT(timer_init);
-static void
-timer_shutdown(void)
-{
- // Reenable timer irq
- timer_set(timer_get() + 50);
- TIFR1 = 1<<OCF1A;
-}
-DECL_SHUTDOWN(timer_shutdown);
-
/****************************************************************
* 32bit timer wrappers
@@ -208,3 +199,13 @@ timer_task(void)
irq_enable();
}
DECL_TASK(timer_task);
+
+static void
+timer_shutdown(void)
+{
+ // Reenable timer irq
+ timer_set(timer_get() + 50);
+ TIFR1 = 1<<OCF1A;
+ timer_repeat_set(timer_get() + TIMER_IDLE_REPEAT_TICKS);
+}
+DECL_SHUTDOWN(timer_shutdown);
diff --git a/src/generic/timer.c b/src/generic/timer.c
index 256ccb3d..5185ed54 100644
--- a/src/generic/timer.c
+++ b/src/generic/timer.c
@@ -94,3 +94,10 @@ timer_task(void)
irq_enable();
}
DECL_TASK(timer_task);
+
+static void
+timer_irq_shutdown(void)
+{
+ timer_repeat_until = timer_read_time() + TIMER_IDLE_REPEAT_TICKS;
+}
+DECL_SHUTDOWN(timer_irq_shutdown);