mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-03 17:56:17 +01:00
GCancellable: Use g_unix_pipe_flags with FD_CLOEXEC
The old code was creating a pipe and setting FD_CLOEXEC non-atomically. https://bugzilla.gnome.org/show_bug.cgi?id=649225
This commit is contained in:
parent
ed37970a04
commit
c078223b38
@ -193,35 +193,19 @@ g_cancellable_class_init (GCancellableClass *klass)
|
||||
|
||||
#ifndef G_OS_WIN32
|
||||
|
||||
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)
|
||||
{
|
||||
GCancellablePrivate *priv;
|
||||
|
||||
priv = cancellable->priv;
|
||||
if (pipe (priv->cancel_pipe) == 0)
|
||||
if (g_unix_pipe_flags (priv->cancel_pipe, FD_CLOEXEC, NULL))
|
||||
{
|
||||
/* Make them nonblocking, just to be sure we don't block
|
||||
* on errors and stuff
|
||||
*/
|
||||
g_unix_set_fd_nonblocking (priv->cancel_pipe[0], TRUE, NULL);
|
||||
g_unix_set_fd_nonblocking (priv->cancel_pipe[1], TRUE, NULL);
|
||||
set_fd_close_exec (priv->cancel_pipe[0]);
|
||||
set_fd_close_exec (priv->cancel_pipe[1]);
|
||||
|
||||
if (priv->cancelled)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user