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章では曖昧な書き方がされていて、ちょっとおもしろい。