فهرست منبع

more deterministic on timer

If two timer will timeout at the same tick, the one started later will
be called later. I've tested the patch on simulator and it _seems_ OK.

Reported-by: xdzy on the forum and delin17 <delin17@qq.com>
Grissiom 12 سال پیش
والد
کامیت
0001344105
1فایلهای تغییر یافته به همراه9 افزوده شده و 3 حذف شده
  1. 9 3
      src/timer.c

+ 9 - 3
src/timer.c

@@ -273,12 +273,18 @@ rt_err_t rt_timer_start(rt_timer_t timer)
     for (n = timer_list->next; n != timer_list; n = n->next)
     {
         t = rt_list_entry(n, struct rt_timer, list);
-        
+
         /*
          * It supposes that the new tick shall less than the half duration of
-         * tick max.
+         * tick max. And if we have two timers that timeout at the same time,
+         * it's prefered that the timer inserted early get called early.
          */
-        if ((t->timeout_tick - timer->timeout_tick) < RT_TICK_MAX / 2)
+        if ((t->timeout_tick - timer->timeout_tick) == 0)
+        {
+            rt_list_insert_after(n, &(timer->list));
+            break;
+        }
+        else if ((t->timeout_tick - timer->timeout_tick) < RT_TICK_MAX / 2)
         {
             rt_list_insert_before(n, &(timer->list));
             break;