Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f0e2986c authored by Dan Willemsen's avatar Dan Willemsen
Browse files

Wait for children to exit in makeparallel

This is a partial revert to the last makeparallel change, since now we
were being killed by the signal before waiting for our child to exit. So
instead of not installing the handlers, only pass the signal along if
it's a SIGTERM.

Bug: 35214134
Test: Ensure that we're still only getting one signal for SIGINT
Test: Ctrl-C, ensure that all the soong_ui lines are before the make
      error line.
Change-Id: I26fff9483a3abfd79ceb5a9ea47e3f7572d9e923
parent a7d4e0cd
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -357,18 +357,23 @@ int main(int argc, char* argv[]) {

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