*** ../bash-20070510/jobs.c Thu Mar 8 16:05:50 2007 --- jobs.c Fri May 18 11:40:14 2007 *************** *** 784,792 **** { old = js.j_firstj++; while (js.j_firstj != old) { if (js.j_firstj >= js.j_jobslots) js.j_firstj = 0; ! if (jobs[js.j_firstj]) break; js.j_firstj++; --- 784,794 ---- { old = js.j_firstj++; + if (old >= js.j_jobslots) + old = js.j_jobslots - 1; while (js.j_firstj != old) { if (js.j_firstj >= js.j_jobslots) js.j_firstj = 0; ! if (jobs[js.j_firstj] || js.j_firstj == old) /* needed if old == 0 */ break; js.j_firstj++; *************** *** 798,806 **** { old = js.j_lastj--; while (js.j_lastj != old) { if (js.j_lastj < 0) js.j_lastj = js.j_jobslots - 1; ! if (jobs[js.j_lastj]) break; js.j_lastj--; --- 800,810 ---- { old = js.j_lastj--; + if (old < 0) + old = 0; while (js.j_lastj != old) { if (js.j_lastj < 0) js.j_lastj = js.j_jobslots - 1; ! if (jobs[js.j_lastj] || js.j_lastj == old) /* needed if old == js.j_jobslots */ break; js.j_lastj--; *************** *** 901,904 **** --- 905,909 ---- nlist = (js.j_jobslots == nsize) ? jobs : (JOB **) xmalloc (nsize * sizeof (JOB *)); + js.c_reaped = js.j_ndead = 0; for (i = j = 0; i < js.j_jobslots; i++) if (jobs[i]) *************** *** 909,912 **** --- 914,922 ---- nprev = j; nlist[j++] = jobs[i]; + if (jobs[i]->state == JDEAD) + { + js.j_ndead++; + js.c_reaped += processes_in_job (i); + } } *************** *** 914,918 **** itrace ("realloc_jobs_list: resize jobs list from %d to %d", js.j_jobslots, nsize); itrace ("realloc_jobs_list: j_lastj changed from %d to %d", js.j_lastj, (j > 0) ? j - 1 : 0); ! itrace ("realloc_jobs_list: j_njobs changed from %d to %d", js.j_njobs, (j > 0) ? j - 1 : 0); #endif --- 924,929 ---- itrace ("realloc_jobs_list: resize jobs list from %d to %d", js.j_jobslots, nsize); itrace ("realloc_jobs_list: j_lastj changed from %d to %d", js.j_lastj, (j > 0) ? j - 1 : 0); ! itrace ("realloc_jobs_list: j_njobs changed from %d to %d", js.j_njobs, j); ! itrace ("realloc_jobs_list: js.j_ndead %d js.c_reaped %d", js.j_ndead, js.c_reaped); #endif *************** *** 964,968 **** realloc_jobs_list (); ! return (js.j_lastj ? js.j_lastj + 1 : 0); } --- 975,983 ---- realloc_jobs_list (); ! #ifdef DEBUG ! itrace("compact_jobs_list: returning %d", (js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0); ! #endif ! ! return ((js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0); }