diff options
Diffstat (limited to 'os/kernel')
| -rw-r--r-- | os/kernel/include/chvt.h | 1 | ||||
| -rw-r--r-- | os/kernel/src/chschd.c | 9 | ||||
| -rw-r--r-- | os/kernel/src/chvt.c | 1 | 
3 files changed, 8 insertions, 3 deletions
diff --git a/os/kernel/include/chvt.h b/os/kernel/include/chvt.h index 8a44bf703..a7667b92c 100644 --- a/os/kernel/include/chvt.h +++ b/os/kernel/include/chvt.h @@ -87,6 +87,7 @@ typedef struct {                                                  list.                       */
    VirtualTimer          *vt_prev;   /**< @brief Last timer in the delta
                                                  list.                       */
 +  systime_t             vt_time;    /**< @brief Must be initialized to -1.  */
    volatile systime_t    vt_systime; /**< @brief System Time counter.        */
  } VTList;
 diff --git a/os/kernel/src/chschd.c b/os/kernel/src/chschd.c index c7db9ad60..f12103324 100644 --- a/os/kernel/src/chschd.c +++ b/os/kernel/src/chschd.c @@ -143,9 +143,12 @@ static void wakeup(void *p) {      dequeue(tp);
    }
  #endif
 -  /* Done this way in order to allow a tail call.*/
 -  tp->p_u.rdymsg = RDY_TIMEOUT;
 -  chSchReadyI(tp);
 +  /* Handling the special case where the thread has been made ready by another
 +     thread with higher priority.*/
 +  if (tp->p_state != THD_STATE_READY) {
 +    tp->p_u.rdymsg = RDY_TIMEOUT;
 +    chSchReadyI(tp);
 +  }
  }
  /**
 diff --git a/os/kernel/src/chvt.c b/os/kernel/src/chvt.c index 070a9c620..b622bb493 100644 --- a/os/kernel/src/chvt.c +++ b/os/kernel/src/chvt.c @@ -42,6 +42,7 @@ VTList vtlist;  void vt_init(void) {
    vtlist.vt_next = vtlist.vt_prev = (void *)&vtlist;
 +  vtlist.vt_time = (systime_t)-1;
    vtlist.vt_systime = 0;
  }
  | 
