mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-26 05:56:14 +01:00
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:
parent
23424e7bcb
commit
a48fc53251
@ -188,6 +188,20 @@ set_fd_nonblocking (int fd)
|
|||||||
#endif
|
#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
|
static void
|
||||||
g_cancellable_open_pipe (GCancellable *cancellable)
|
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[0]);
|
||||||
set_fd_nonblocking (cancellable->cancel_pipe[1]);
|
set_fd_nonblocking (cancellable->cancel_pipe[1]);
|
||||||
|
set_fd_close_exec (cancellable->cancel_pipe[0]);
|
||||||
|
set_fd_close_exec (cancellable->cancel_pipe[1]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
g_warning ("Failed to create pipe for GCancellable. Out of file descriptors?");
|
g_warning ("Failed to create pipe for GCancellable. Out of file descriptors?");
|
||||||
|
Loading…
Reference in New Issue
Block a user