Merge "Wait for children to exit in makeparallel" am: 9b1a185029 am: c08e57ce4d
am: d04de52560

Change-Id: Ia6c4cb26f2d5d8c485f1139ac128e7482b6235a0
diff --git a/tools/makeparallel/makeparallel.cpp b/tools/makeparallel/makeparallel.cpp
index a99b286..66babdf 100644
--- a/tools/makeparallel/makeparallel.cpp
+++ b/tools/makeparallel/makeparallel.cpp
@@ -357,18 +357,23 @@
 
   static pid_t pid;
 
-  // Set up signal handlers to forward SIGTERM to child
-  // Assume that all other signals are sent to the entire process group
+  // Set up signal handlers to forward SIGTERM to child.
+  // Assume that all other signals are sent to the entire process group,
+  // and that we'll wait for our child to exit instead of handling them.
   struct sigaction action = {};
-  action.sa_flags = SA_SIGINFO | SA_RESTART,
-  action.sa_sigaction = [](int signal, siginfo_t*, void*) {
-    if (pid > 0) {
+  action.sa_flags = SA_RESTART;
+  action.sa_handler = [](int signal) {
+    if (signal == SIGTERM && pid > 0) {
       kill(pid, signal);
     }
   };
 
   int ret = 0;
+  if (!ret) ret = sigaction(SIGHUP, &action, NULL);
+  if (!ret) ret = sigaction(SIGINT, &action, NULL);
+  if (!ret) ret = sigaction(SIGQUIT, &action, NULL);
   if (!ret) ret = sigaction(SIGTERM, &action, NULL);
+  if (!ret) ret = sigaction(SIGALRM, &action, NULL);
   if (ret < 0) {
     error(errno, errno, "sigaction failed");
   }