diff --git a/os/kernel/include/chinline.h b/os/kernel/include/chinline.h index 65d487804..663e458a8 100644 --- a/os/kernel/include/chinline.h +++ b/os/kernel/include/chinline.h @@ -43,13 +43,15 @@ static INLINE void prio_insert(Thread *tp, ThreadsQueue *tqp) { do { cp = cp->p_next; } while ((cp != (Thread *)tqp) && (cp->p_prio >= tp->p_prio)); - tp->p_prev = (tp->p_next = cp)->p_prev; + tp->p_next = cp; + tp->p_prev = cp->p_prev; tp->p_prev->p_next = cp->p_prev = tp; } static INLINE void queue_insert(Thread *tp, ThreadsQueue *tqp) { - tp->p_prev = (tp->p_next = (Thread *)tqp)->p_prev; + tp->p_next = (Thread *)tqp; + tp->p_prev = tqp->p_prev; tp->p_prev->p_next = tqp->p_prev = tp; } diff --git a/os/kernel/src/chlists.c b/os/kernel/src/chlists.c index db3b52abc..62cb08d3b 100644 --- a/os/kernel/src/chlists.c +++ b/os/kernel/src/chlists.c @@ -55,9 +55,9 @@ void prio_insert(Thread *tp, ThreadsQueue *tqp) { cp = cp->p_next; /* Not end of queue? and cp has equal or higher priority than tp?.*/ } while ((cp != (Thread *)tqp) && (cp->p_prio >= tp->p_prio)); - /* Insert before cp, point tp to next and prev in queue.*/ - tp->p_prev = (tp->p_next = cp)->p_prev; - /* Make prev point to tp, and cp point back to tp.*/ + /* Insertion on p_prev.*/ + tp->p_next = cp; + tp->p_prev = cp->p_prev; tp->p_prev->p_next = cp->p_prev = tp; } @@ -70,7 +70,8 @@ void prio_insert(Thread *tp, ThreadsQueue *tqp) { */ void queue_insert(Thread *tp, ThreadsQueue *tqp) { - tp->p_prev = (tp->p_next = (Thread *)tqp)->p_prev; + tp->p_next = (Thread *)tqp; + tp->p_prev = tqp->p_prev; tp->p_prev->p_next = tqp->p_prev = tp; } diff --git a/os/kernel/src/chschd.c b/os/kernel/src/chschd.c index 4b04cbe59..4599ccd1a 100644 --- a/os/kernel/src/chschd.c +++ b/os/kernel/src/chschd.c @@ -85,7 +85,8 @@ Thread *chSchReadyI(Thread *tp) { cp = cp->p_next; } while (cp->p_prio >= tp->p_prio); /* Insertion on p_prev.*/ - tp->p_prev = (tp->p_next = cp)->p_prev; + tp->p_next = cp; + tp->p_prev = cp->p_prev; tp->p_prev->p_next = cp->p_prev = tp; return tp; } diff --git a/readme.txt b/readme.txt index 69f77545a..4f97c4158 100644 --- a/readme.txt +++ b/readme.txt @@ -59,6 +59,7 @@ ***************************************************************************** *** 2.0.3 *** +- FIX: Fixed crash of the Posix simulator under Ubuntu 10.4 (bug 3055329). - FIX: Fixed incorrect PLL2 setting in STM32 HAL (bug 3044770). - FIX: Fixed wrong check on STM32_HCLK (bug 3044758). - FIX: Fixed wrong condition check in STM32 PWM driver (bug 3041414).