summaryrefslogtreecommitdiff
path: root/job.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@redhat.com>1993-05-06 21:30:10 +0000
committerRoland McGrath <roland@redhat.com>1993-05-06 21:30:10 +0000
commit9596950898548766d97cf9eae0e1cb996a56d358 (patch)
tree35635e334aea12fb90055dbb73f963418e804371 /job.c
parent29de1a7e5aa3634b8b6f72cba09621817889f87f (diff)
downloadgunmake-9596950898548766d97cf9eae0e1cb996a56d358.tar.gz
Formerly job.c.~102~
Diffstat (limited to 'job.c')
-rw-r--r--job.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/job.c b/job.c
index 9703c74..19b28da 100644
--- 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;