Fixed bug 3055329.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2139 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
gdisirio 2010-08-29 06:29:01 +00:00
parent ece6ef6bf7
commit 0ea1795853
4 changed files with 13 additions and 7 deletions

View File

@ -36,13 +36,15 @@ static INLINE void prio_insert(Thread *tp, ThreadsQueue *tqp) {
do { do {
cp = cp->p_next; cp = cp->p_next;
} while ((cp != (Thread *)tqp) && (cp->p_prio >= tp->p_prio)); } 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; tp->p_prev->p_next = cp->p_prev = tp;
} }
static INLINE void queue_insert(Thread *tp, ThreadsQueue *tqp) { 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; tp->p_prev->p_next = tqp->p_prev = tp;
} }

View File

@ -48,9 +48,9 @@ void prio_insert(Thread *tp, ThreadsQueue *tqp) {
cp = cp->p_next; cp = cp->p_next;
/* Not end of queue? and cp has equal or higher priority than tp?.*/ /* Not end of queue? and cp has equal or higher priority than tp?.*/
} while ((cp != (Thread *)tqp) && (cp->p_prio >= tp->p_prio)); } while ((cp != (Thread *)tqp) && (cp->p_prio >= tp->p_prio));
/* Insert before cp, point tp to next and prev in queue.*/ /* Insertion on p_prev.*/
tp->p_prev = (tp->p_next = cp)->p_prev; tp->p_next = cp;
/* Make prev point to tp, and cp point back to tp.*/ tp->p_prev = cp->p_prev;
tp->p_prev->p_next = cp->p_prev = tp; 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) { 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; tp->p_prev->p_next = tqp->p_prev = tp;
} }

View File

@ -78,7 +78,8 @@ Thread *chSchReadyI(Thread *tp) {
cp = cp->p_next; cp = cp->p_next;
} while (cp->p_prio >= tp->p_prio); } while (cp->p_prio >= tp->p_prio);
/* Insertion on p_prev.*/ /* 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; tp->p_prev->p_next = cp->p_prev = tp;
return tp; return tp;
} }

View File

@ -62,6 +62,8 @@
***************************************************************************** *****************************************************************************
*** 2.1.2 *** *** 2.1.2 ***
- FIX: Fixed crash of the Posix simulator under Ubuntu 10.4 (bug 3055329)
(backported to 2.0.3).
- FIX: Fixed incorrect PLL2 setting in STM32 HAL (bug 3044770)(backported - FIX: Fixed incorrect PLL2 setting in STM32 HAL (bug 3044770)(backported
in 2.0.3). in 2.0.3).
- FIX: Fixed wrong check on STM32_HCLK (bug 3044758)(backported to 2.0.3). - FIX: Fixed wrong check on STM32_HCLK (bug 3044758)(backported to 2.0.3).