From aaed50ac3fbe0ff731fdf835320797db19e828b1 Mon Sep 17 00:00:00 2001
From: Roland McGrath <roland@redhat.com>
Date: Thu, 14 Dec 1995 11:21:20 +0000
Subject: [PATCH] (reap_children): Call unblock_sigs after start_job_command.

---
 job.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/job.c b/job.c
index 5173dfbd..3d4f328b 100644
--- a/job.c
+++ b/job.c
@@ -129,6 +129,7 @@ extern int start_remote_job_p ();
 extern int start_remote_job (), remote_status ();
 
 RETSIGTYPE child_handler ();
+void unblock_sigs ();
 static void free_child (), start_job_command ();
 static int load_too_high (), job_next_command ();
 
@@ -407,6 +408,11 @@ reap_children (block, err)
 			 by start_remote_job_p.  */
 		      c->remote = start_remote_job_p ();
 		      start_job_command (c);
+		      /* Fatal signals are left blocked in case we were
+			 about to put that child on the chain.  But it is
+			 already there, so it is safe for a fatal signal to
+			 arrive now; it will clean up this child's targets.  */
+		      unblock_sigs ();
 		      if (c->file->command_state == cs_running)
 			/* We successfully started the new command.
 			   Loop to reap more children.  */
@@ -509,7 +515,11 @@ unblock_sigs ()
 #endif
 
 /* Start a job to run the commands specified in CHILD.
-   CHILD is updated to reflect the commands and ID of the child process.  */
+   CHILD is updated to reflect the commands and ID of the child process.
+
+   NOTE: On return fatal signals are blocked!  The caller is responsible
+   for calling `unblock_sigs', once the new child is safely on the chain so
+   it can be cleaned up in the event of a fatal signal.  */
 
 static void
 start_job_command (child)