From: Alexander Larsson Date: Fri, 15 May 2009 08:42:28 +0000 (+0200) Subject: Make cancellable pipe fds close-on-exec X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=a48fc532519b849498c8b75dde578caf0c270b23;p=dana%2Fcg-glib.git Make cancellable pipe fds close-on-exec GCancellable is purely an in-process thing, so ensure that no cancellable fds accidentally leak to child processes. --- diff --git a/gio/gcancellable.c b/gio/gcancellable.c index 39f8778f..589b83a7 100644 --- a/gio/gcancellable.c +++ b/gio/gcancellable.c @@ -188,6 +188,20 @@ set_fd_nonblocking (int fd) #endif } +static void +set_fd_close_exec (int fd) +{ + int flags; + + flags = fcntl (fd, F_GETFD, 0); + if (flags != -1 && (flags & FD_CLOEXEC) == 0) + { + flags |= FD_CLOEXEC; + fcntl (fd, F_SETFD, flags); + } +} + + static void g_cancellable_open_pipe (GCancellable *cancellable) { @@ -198,6 +212,8 @@ g_cancellable_open_pipe (GCancellable *cancellable) */ set_fd_nonblocking (cancellable->cancel_pipe[0]); set_fd_nonblocking (cancellable->cancel_pipe[1]); + set_fd_close_exec (cancellable->cancel_pipe[0]); + set_fd_close_exec (cancellable->cancel_pipe[1]); } else g_warning ("Failed to create pipe for GCancellable. Out of file descriptors?");