From 0ea17958535e56f50064ae47a50a3cd742f88163 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 29 Aug 2010 06:29:01 +0000 Subject: Fixed bug 3055329. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2139 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/kernel/include/chinline.h | 6 ++++-- os/kernel/src/chlists.c | 9 +++++---- os/kernel/src/chschd.c | 3 ++- 3 files changed, 11 insertions(+), 7 deletions(-) (limited to 'os/kernel') diff --git a/os/kernel/include/chinline.h b/os/kernel/include/chinline.h index a0beb7455..f41c12cc2 100644 --- a/os/kernel/include/chinline.h +++ b/os/kernel/include/chinline.h @@ -36,13 +36,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 2d973e771..83bdf8b35 100644 --- a/os/kernel/src/chlists.c +++ b/os/kernel/src/chlists.c @@ -48,9 +48,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; } @@ -63,7 +63,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 d412798c0..51987749f 100644 --- a/os/kernel/src/chschd.c +++ b/os/kernel/src/chschd.c @@ -78,7 +78,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; } -- cgit v1.2.3