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.
This commit is contained in:
Alexander Larsson 2009-05-15 10:42:28 +02:00
parent 23424e7bcb
commit a48fc53251

View File

@ -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?");