mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 01:20:42 -05:00
x11: Do not trust there is task in error paths
Flushing the X11 selection output stream may happen synchronously or
implicitly, in which case there is not a task to complete. Check there
is actually a task before returning errors. We additionally set the
pipe_error flag, so future operations will fail with an error, albeit
with a more generic message.
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1198
(cherry picked from commit 1909977a67
)
This commit is contained in:
parent
1e17f8813b
commit
20cf6b630d
@ -282,13 +282,16 @@ meta_x11_selection_output_stream_perform_flush (MetaX11SelectionOutputStream *st
|
|||||||
priv->delete_pending = FALSE;
|
priv->delete_pending = FALSE;
|
||||||
priv->pipe_error = TRUE;
|
priv->pipe_error = TRUE;
|
||||||
|
|
||||||
XGetErrorText (xdisplay, error_code, error_str, sizeof (error_str));
|
if (priv->pending_task)
|
||||||
g_task_return_new_error (priv->pending_task,
|
{
|
||||||
G_IO_ERROR,
|
XGetErrorText (xdisplay, error_code, error_str, sizeof (error_str));
|
||||||
G_IO_ERROR_BROKEN_PIPE,
|
g_task_return_new_error (priv->pending_task,
|
||||||
"Failed to flush selection output stream: %s",
|
G_IO_ERROR,
|
||||||
error_str);
|
G_IO_ERROR_BROKEN_PIPE,
|
||||||
g_clear_object (&priv->pending_task);
|
"Failed to flush selection output stream: %s",
|
||||||
|
error_str);
|
||||||
|
g_clear_object (&priv->pending_task);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (priv->pending_task && priv->data->len == 0 && !priv->delete_pending)
|
else if (priv->pending_task && priv->data->len == 0 && !priv->delete_pending)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user