From 61e6f4a299d8e5e34488e33967517b7212d03d37 Mon Sep 17 00:00:00 2001 From: Peter Mitsis Date: Fri, 29 Jan 2016 11:30:20 -0500 Subject: [PATCH] sys_clock: Lock interrupts when processing announced ticks Interrupts must be locked when processing announced ticks in _nano_sys_clock_tick_announce(). This prevents higher priority interrupts from interrupting the tick announcement and possibly corrupting the timeout and/or timer queues. Change-Id: I4e87fc5b3ad36161e0accb50b2691f975f5877e5 Signed-off-by: Peter Mitsis --- kernel/nanokernel/nano_sys_clock.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/nanokernel/nano_sys_clock.c b/kernel/nanokernel/nano_sys_clock.c index 8ee6b2fb4ff..793edf51dfd 100644 --- a/kernel/nanokernel/nano_sys_clock.c +++ b/kernel/nanokernel/nano_sys_clock.c @@ -201,9 +201,13 @@ static inline void handle_expired_nano_timers(int ticks) */ void _nano_sys_clock_tick_announce(int32_t ticks) { + unsigned int key; + + key = irq_lock(); _sys_clock_tick_count += ticks; handle_expired_nano_timeouts(ticks); handle_expired_nano_timers(ticks); + irq_unlock(key); } /* get closest nano timers deadline expiry, (uint32_t)TICKS_UNLIMITED if none */