Formerly job.c.~102~
authorRoland McGrath <roland@redhat.com>
Thu, 6 May 1993 21:30:10 +0000 (21:30 +0000)
committerRoland McGrath <roland@redhat.com>
Thu, 6 May 1993 21:30:10 +0000 (21:30 +0000)
job.c

diff --git a/job.c b/job.c
index 9703c74..19b28da 100644 (file)
--- a/job.c
+++ b/job.c
@@ -333,12 +333,24 @@ reap_children (block, err)
              /* If there are more commands to run, try to start them.  */
              if (job_next_command (c))
                {
-                 /* Check again whether to start remotely.
-                    Whether or not we want to changes over time.
-                    Also, start_remote_job may need state set up
-                    by start_remote_job_p.  */
-                 c->remote = start_remote_job_p ();
-                 start_job_command (c);
+                 if (handling_fatal_signal)
+                   {
+                     /* Never start new commands while we are dying.
+                        Since there are more commands that wanted to be run,
+                        the target was not completely remade.  So we treat
+                        this as if a command had failed.  */
+                     c->file->command_state = cs_finished;
+                     c->file->update_status = 1;
+                   }
+                 else
+                   {
+                     /* Check again whether to start remotely.
+                        Whether or not we want to changes over time.
+                        Also, start_remote_job may need state set up
+                        by start_remote_job_p.  */
+                     c->remote = start_remote_job_p ();
+                     start_job_command (c);
+                   }
                }
 
              switch (c->file->command_state)
@@ -362,8 +374,9 @@ reap_children (block, err)
                }
            }
 
-         /* Notice if the target of the commands has been changed.  */
-         notice_finished_file (c->file);
+         if (! handling_fatal_signal)
+           /* Notice if the target of the commands has been changed.  */
+           notice_finished_file (c->file);
 
          if (debug_flag)
            printf ("Removing child 0x%08lx PID %d%s from chain.\n",
@@ -375,7 +388,8 @@ reap_children (block, err)
            children = c->next;
          else
            lastc->next = c->next;
-         free_child (c);
+         if (! handling_fatal_signal) /* Avoid nonreentrancy.  */
+           free_child (c);
 
          /* There is now another slot open.  */
          --job_slots_used;