mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-05-25 15:00:41 +02:00
When creating a pipe for a cancelled cancellable, write to it
Includes (untested) fix for win32 that calls SetEvent() in that case.
This commit is contained in:
parent
faae032ad0
commit
6db03d73a4
@ -226,6 +226,7 @@ set_fd_close_exec (int fd)
|
|||||||
static void
|
static void
|
||||||
g_cancellable_open_pipe (GCancellable *cancellable)
|
g_cancellable_open_pipe (GCancellable *cancellable)
|
||||||
{
|
{
|
||||||
|
const char ch = 'x';
|
||||||
GCancellablePrivate *priv;
|
GCancellablePrivate *priv;
|
||||||
|
|
||||||
priv = cancellable->priv;
|
priv = cancellable->priv;
|
||||||
@ -238,6 +239,9 @@ g_cancellable_open_pipe (GCancellable *cancellable)
|
|||||||
set_fd_nonblocking (priv->cancel_pipe[1]);
|
set_fd_nonblocking (priv->cancel_pipe[1]);
|
||||||
set_fd_close_exec (priv->cancel_pipe[0]);
|
set_fd_close_exec (priv->cancel_pipe[0]);
|
||||||
set_fd_close_exec (priv->cancel_pipe[1]);
|
set_fd_close_exec (priv->cancel_pipe[1]);
|
||||||
|
|
||||||
|
if (priv->cancelled)
|
||||||
|
write (priv->cancel_pipe[1], &ch, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -371,7 +375,6 @@ g_cancellable_reset (GCancellable *cancellable)
|
|||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
if (priv->event)
|
if (priv->event)
|
||||||
ResetEvent (priv->event);
|
ResetEvent (priv->event);
|
||||||
else
|
|
||||||
#endif
|
#endif
|
||||||
if (priv->cancel_pipe[0] != -1)
|
if (priv->cancel_pipe[0] != -1)
|
||||||
read (priv->cancel_pipe[0], &ch, 1);
|
read (priv->cancel_pipe[0], &ch, 1);
|
||||||
@ -520,8 +523,9 @@ g_cancellable_make_pollfd (GCancellable *cancellable, GPollFD *pollfd)
|
|||||||
G_UNLOCK(cancellable);
|
G_UNLOCK(cancellable);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
if (priv->cancelled)
|
||||||
|
SetEvent(priv->event);
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->fd_refcount++;
|
priv->fd_refcount++;
|
||||||
G_UNLOCK(cancellable);
|
G_UNLOCK(cancellable);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user