http://lists.gnu.org/archive/html/bug-make/2005-07/msg00050.html http://lists.gnu.org/archive/html/bug-make/2005-08/msg00019.html http://bugs.gentoo.org/107613 2005-08-07 Paul D. Smith Fix a bug reported by Michael Matz : patch included. If make is running in parallel without -k and two jobs die in a row, but not too close to each other, then make will quit without waiting for the rest of the jobs to die. * main.c (die): Don't reset err before calling reap_children() the second time: we still want it to be in the error condition. * job.c (reap_children): Use a static variable, rather than err, to control whether or not the error message should be printed. Index: job.c =================================================================== RCS file: /cvsroot/make/make/job.c,v retrieving revision 1.166 retrieving revision 1.167 diff -u -p -r1.166 -r1.167 --- job.c 26 Jun 2005 03:31:30 -0000 1.166 +++ job.c 8 Aug 2005 05:08:00 -0000 1.167 @@ -475,9 +479,14 @@ reap_children (int block, int err) if (err && block) { - /* We might block for a while, so let the user know why. */ + static int printed = 0; + + /* We might block for a while, so let the user know why. + Only print this message once no matter how many jobs are left. */ fflush (stdout); - error (NILF, _("*** Waiting for unfinished jobs....")); + if (!printed) + error (NILF, _("*** Waiting for unfinished jobs....")); + printed = 1; } /* We have one less dead child to reap. As noted in Index: main.c =================================================================== RCS file: /cvsroot/make/make/main.c,v retrieving revision 1.210 retrieving revision 1.211 diff -u -p -r1.210 -r1.211 --- main.c 12 Jul 2005 04:35:13 -0000 1.210 +++ main.c 8 Aug 2005 05:08:00 -0000 1.211 @@ -2990,7 +2996,8 @@ die (int status) print_version (); /* Wait for children to die. */ - for (err = (status != 0); job_slots_used > 0; err = 0) + err = (status != 0); + while (job_slots_used > 0) reap_children (1, err); /* Let the remote job module clean up its state. */