30) のsetpri()のバグをみてみよう。
2150 /*
2151 * Set user priority.
2152 * The rescheduling flag (runrun)
2153 * is set if the priority is higher
2154 * than the currently running process.
2155 */
2156 setpri(up)
2157 {
2158 register *pp, p;
2159
2160 pp = up;
2161 p = (pp->p_cpu & 0377)/16;
2162 p =+ PUSER + pp->p_nice;
2163 if(p > 127)
2164 p = 127;
2165 if(p > curpri)
2166 runrun++;
2167 pp->p_pri = p;
2168 }
コメントの内容と比較すれば、2165行目の比較が
if(p > curpri)
ではなく
if(p < curpri)
でなければならいのはほとんど明らか
といえる。Lions本の8章では曖昧な書き方がされていて、ちょっとおもしろい。