about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--test-skeleton.c9
2 files changed, 14 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 785baf996b..b2ea30c235 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2014-06-30  Maciej W. Rozycki  <macro@codesourcery.com>
+	    Roland McGrath <roland@hack.frob.com>
+
+	* test-skeleton.c (signal_handler): Kill the whole process group
+	before killing the child individually.
+	(main): Report any failure on `setpgid'.
+
 2014-06-30  Roland McGrath  <roland@hack.frob.com>
 
 	* sysdeps/arm/nptl/tls.h: Rename the multiple inclusion guard
diff --git a/test-skeleton.c b/test-skeleton.c
index 286d1419cf..c1278ca3b2 100644
--- a/test-skeleton.c
+++ b/test-skeleton.c
@@ -17,6 +17,7 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <assert.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <getopt.h>
@@ -138,7 +139,10 @@ signal_handler (int sig __attribute__ ((unused)))
   int killed;
   int status;
 
-  /* Send signal.  */
+  assert (pid > 1);
+  /* Kill the whole process group.  */
+  kill (-pid, SIGKILL);
+  /* In case setpgid failed in the child, kill it individually too.  */
   kill (pid, SIGKILL);
 
   /* Wait for it to terminate.  */
@@ -342,7 +346,8 @@ main (int argc, char *argv[])
 
       /* We put the test process in its own pgrp so that if it bogusly
 	 generates any job control signals, they won't hit the whole build.  */
-      setpgid (0, 0);
+      if (setpgid (0, 0) != 0)
+	printf ("Failed to set the process group ID: %m\n");
 
       /* Execute the test function and exit with the return value.   */
       exit (TEST_FUNCTION);