Fixed Savannah bug #15641.
authorBoris Kolpackov <boris@kolpackov.net>
Wed, 8 Feb 2006 17:29:07 +0000 (17:29 +0000)
committerBoris Kolpackov <boris@kolpackov.net>
Wed, 8 Feb 2006 17:29:07 +0000 (17:29 +0000)
ChangeLog
job.c
job.h
tests/ChangeLog
tests/scripts/features/parallelism

index c1e05de..fbe12be 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-02-08  Boris Kolpackov  <boris@kolpackov.net>
+
+       * job.h (struct child): Add dontcare bitfield.
+       * job.c (new_job): Cache dontcare flag.
+       * job.c (reap_children): Use cached dontcare flag instead of the
+       one in struct file. Fixes Savannah bug #15641.
+
 2006-02-06  Paul D. Smith  <psmith@gnu.org>
 
        * vpath.c (selective_vpath_search): If the file we find has a
diff --git a/job.c b/job.c
index 1c75420..fb07141 100644 (file)
--- a/job.c
+++ b/job.c
@@ -383,7 +383,7 @@ child_error (char *target_name, int exit_code, int exit_sig, int coredump,
 {
   if (ignored && silent_flag)
     return;
-
+    
 #ifdef VMS
   if (!(exit_code & 1))
       error (NILF,
@@ -718,7 +718,7 @@ reap_children (int block, int err)
       if (c->good_stdin)
         good_stdin_used = 0;
 
-      dontcare = c->file->dontcare;
+      dontcare = c->dontcare;
 
       if (child_failed && !c->noerror && !ignore_errors_flag)
         {
@@ -1612,6 +1612,10 @@ new_job (struct file *file)
   c->command_lines = lines;
   c->sh_batch_file = NULL;
 
+  /* Cache dontcare flag because file->dontcare can be changed once we
+     return. Check dontcare inheritance mechanism for details.  */
+  c->dontcare = file->dontcare;
+
   /* Fetch the first command line to be run.  */
   job_next_command (c);
 
diff --git a/job.h b/job.h
index 5a0ae75..c0e42dd 100644 (file)
--- a/job.h
+++ b/job.h
@@ -63,6 +63,7 @@ struct child
 
     unsigned int good_stdin:1; /* Nonzero if this child has a good stdin.  */
     unsigned int deleted:1;    /* Nonzero if targets have been deleted.  */
+    unsigned int dontcare:1;    /* Saved dontcare flag.  */
   };
 
 extern struct child *children;
index 8a3b988..3e05ab8 100644 (file)
@@ -1,3 +1,7 @@
+2006-02-08  Boris Kolpackov  <boris@kolpackov.net>
+
+       * scripts/features/parallelism: Add a test for bug #15641.
+
 2006-02-06  Paul D. Smith  <psmith@gnu.org>
 
        * scripts/options/dash-W: Add a test for bug #15341.
index 6bde30f..60ae55b 100644 (file)
@@ -108,4 +108,22 @@ Ok done',
              512);
 
 
+# Test for Savannah bug #15641.
+#
+run_make_test('
+.PHONY: all
+all:; @:
+
+-include foo.d
+
+foo.d: comp
+       @echo building $@
+
+comp: mod_a.o mod_b.o; @:
+
+mod_a.o mod_b.o:
+       @exit 1
+', '-j2', '');
+
+
 1;