From 39ff7577053ab59dfe363280421df1236bffa01c Mon Sep 17 00:00:00 2001 From: "bernard.xiong" Date: Mon, 19 Oct 2009 12:11:17 +0000 Subject: [PATCH] fix timer re-start issue if stop a timer in itself timeout_func. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@107 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- src/timer.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/timer.c b/src/timer.c index 558cbfac3..f35ce8e96 100644 --- a/src/timer.c +++ b/src/timer.c @@ -270,6 +270,9 @@ rt_err_t rt_timer_stop(rt_timer_t timer) /* disable interrupt */ level = rt_hw_interrupt_disable(); + /* change stat */ + timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; + /* remove it from timer list */ rt_list_remove(&(timer->list)); @@ -361,14 +364,18 @@ void rt_timer_check() rt_kprintf("current tick: %d\n", current_tick); #endif - /* change timer state */ - t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; - - if (t->parent.flag & RT_TIMER_FLAG_PERIODIC) + if ((t->parent.flag & RT_TIMER_FLAG_PERIODIC) && + (t->parent.flag & RT_TIMER_FLAG_ACTIVATED)) { /* start it */ + t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; rt_timer_start(t); } + else + { + /* stop timer */ + t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; + } } else break; }