/* 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)
}
}
- /* 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",
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;