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
This commit is contained in:
bernard.xiong 2009-10-19 12:11:17 +00:00
parent 597015a3fe
commit 39ff757705
1 changed files with 11 additions and 4 deletions

View File

@ -270,6 +270,9 @@ rt_err_t rt_timer_stop(rt_timer_t timer)
/* disable interrupt */ /* disable interrupt */
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
/* change stat */
timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;
/* remove it from timer list */ /* remove it from timer list */
rt_list_remove(&(timer->list)); rt_list_remove(&(timer->list));
@ -361,14 +364,18 @@ void rt_timer_check()
rt_kprintf("current tick: %d\n", current_tick); rt_kprintf("current tick: %d\n", current_tick);
#endif #endif
/* change timer state */ if ((t->parent.flag & RT_TIMER_FLAG_PERIODIC) &&
t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; (t->parent.flag & RT_TIMER_FLAG_ACTIVATED))
if (t->parent.flag & RT_TIMER_FLAG_PERIODIC)
{ {
/* start it */ /* start it */
t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;
rt_timer_start(t); rt_timer_start(t);
} }
else
{
/* stop timer */
t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;
}
} }
else break; else break;
} }