diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2017-10-11 22:01:45 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2017-10-12 11:59:27 -0400 |
commit | 744c6d114e3681a2e8cfcd4475424a7d19774d52 (patch) | |
tree | e6461641b82cf0a59fe99e171a69343fcda1b78b /src | |
parent | 3b9b4e4d6f68216470bcb86070033a26a3562e23 (diff) | |
download | kutter-744c6d114e3681a2e8cfcd4475424a7d19774d52.tar.gz kutter-744c6d114e3681a2e8cfcd4475424a7d19774d52.tar.xz kutter-744c6d114e3681a2e8cfcd4475424a7d19774d52.zip |
sched: Don't shutdown on a "timer in the past" if already shutdown
A shutdown will not help if the mcu is already in a shutdown state.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src')
-rw-r--r-- | src/avr/timer.c | 2 | ||||
-rw-r--r-- | src/generic/timer_irq.c | 2 | ||||
-rw-r--r-- | src/linux/timer.c | 5 | ||||
-rw-r--r-- | src/sched.c | 2 |
4 files changed, 5 insertions, 6 deletions
diff --git a/src/avr/timer.c b/src/avr/timer.c index e40007d8..dcd01869 100644 --- a/src/avr/timer.c +++ b/src/avr/timer.c @@ -195,7 +195,7 @@ ISR(TIMER1_COMPA_vect) irq_disable(); uint16_t now = timer_get(); if ((int16_t)(next - now) < (int16_t)(-timer_from_us(1000))) - shutdown("Rescheduled timer in the past"); + try_shutdown("Rescheduled timer in the past"); if (sched_tasks_busy()) { timer_repeat_set(now + TIMER_REPEAT_TICKS); next = now + TIMER_DEFER_REPEAT_TICKS; diff --git a/src/generic/timer_irq.c b/src/generic/timer_irq.c index 6527c949..0b4c3c8d 100644 --- a/src/generic/timer_irq.c +++ b/src/generic/timer_irq.c @@ -54,7 +54,7 @@ timer_dispatch_many(void) if (unlikely(timer_is_before(tru, now))) { // Check if there are too many repeat timers if (diff < (int32_t)(-timer_from_us(1000))) - shutdown("Rescheduled timer in the past"); + try_shutdown("Rescheduled timer in the past"); if (sched_tasks_busy()) { timer_repeat_until = now + TIMER_REPEAT_TICKS; return now + TIMER_DEFER_REPEAT_TICKS; diff --git a/src/linux/timer.c b/src/linux/timer.c index 016f3da3..d53dd7da 100644 --- a/src/linux/timer.c +++ b/src/linux/timer.c @@ -166,9 +166,8 @@ timer_dispatch(void) if (unlikely(timespec_is_before(tru, now))) { // Check if there are too many repeat timers - if (unlikely(timespec_is_before(timespec_add(nt, 100000000), now)) - && !sched_is_shutdown()) - shutdown("Rescheduled timer in the past"); + if (unlikely(timespec_is_before(timespec_add(nt, 100000000), now))) + try_shutdown("Rescheduled timer in the past"); if (sched_tasks_busy()) { timer_repeat_until = timespec_add(now, TIMER_REPEAT_NS); next_wake_time = timespec_add(now, TIMER_DEFER_REPEAT_NS); diff --git a/src/sched.c b/src/sched.c index e4b51355..f278c426 100644 --- a/src/sched.c +++ b/src/sched.c @@ -306,7 +306,7 @@ sched_report_shutdown(void) void sched_try_shutdown(uint_fast8_t reason) { - if (shutdown_status != 2) + if (!shutdown_status) sched_shutdown(reason); } |