weston-launch: Unblock our signalfd signals before execing child
authorKristian Høgsberg <krh@bitplanet.net>
Tue, 30 Jul 2013 16:45:04 +0000 (09:45 -0700)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 30 Jul 2013 16:45:04 +0000 (09:45 -0700)
Giovanni Campagna ran into this with mutter.

src/weston-launch.c

index 8d8a903..e2d2d32 100644 (file)
@@ -542,6 +542,7 @@ static void
 launch_compositor(struct weston_launch *wl, int argc, char *argv[])
 {
        char *child_argv[MAX_ARGV_SIZE];
+       sigset_t allsigs;
        int i;
 
        if (wl->verbose)
@@ -556,6 +557,13 @@ launch_compositor(struct weston_launch *wl, int argc, char *argv[])
 
        unsetenv("DISPLAY");
 
+       /* Do not give our signal mask to the new process. */
+       sigemptyset(&mask);
+       sigaddset(&mask, SIGTERM);
+       sigaddset(&mask, SIGCHLD);
+       sigaddset(&mask, SIGINT);
+       sigprocmask(SIG_UNBLOCK, &mask, NULL);
+
        child_argv[0] = wl->pw->pw_shell;
        child_argv[1] = "-l";
        child_argv[2] = "-c";