compositor: reset signal mask for children
authorPekka Paalanen <ppaalanen@gmail.com>
Thu, 8 Dec 2011 08:44:56 +0000 (10:44 +0200)
committerPekka Paalanen <ppaalanen@gmail.com>
Thu, 8 Dec 2011 08:44:56 +0000 (10:44 +0200)
The signal mask is inherited over fork() and exec(), we need to
explicitly reset it.

This allows the children to receive the signals the compositor itself
has blocked, for example SIGINT and SIGTERM.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
compositor/compositor.c

index 79440fd..30cc7ab 100644 (file)
@@ -90,6 +90,11 @@ child_client_exec(int sockfd, const char *path)
 {
        int flags;
        char s[32];
+       sigset_t allsigs;
+
+       /* do not give our signal mask to the new process */
+       sigfillset(&allsigs);
+       sigprocmask(SIG_UNBLOCK, &allsigs, NULL);
 
        /* SOCK_CLOEXEC closes both ends, so we need to unset
         * the flag on the client fd. */