[mutter/gnome-3-34] x11: Ensure flush() Flushes all output stream data
- From: Robert Mader <rmader src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gnome-3-34] x11: Ensure flush() Flushes all output stream data
- Date: Sun, 19 Apr 2020 20:01:26 +0000 (UTC)
commit 5f34a0f2452557005688348e97aa790b9095003e
Author: Carlos Garnacho <carlosg gnome org>
Date: Sat Apr 11 16:59:17 2020 +0200
x11: Ensure flush() Flushes all output stream data
This seemed to work under the assumption that a flush() call can
only result in one INCR roundtrip. This is evidently not true, so
we should hold things off until all pending data is actually flushed.
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1198
(cherry picked from commit 8a2b82897db66b3edbe985a370429b4f36b9918c)
src/x11/meta-x11-selection-output-stream.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
---
diff --git a/src/x11/meta-x11-selection-output-stream.c b/src/x11/meta-x11-selection-output-stream.c
index 9928da6b2..6095b5500 100644
--- a/src/x11/meta-x11-selection-output-stream.c
+++ b/src/x11/meta-x11-selection-output-stream.c
@@ -292,12 +292,17 @@ meta_x11_selection_output_stream_invoke_flush (gpointer data)
{
MetaX11SelectionOutputStream *stream =
META_X11_SELECTION_OUTPUT_STREAM (data);
+ MetaX11SelectionOutputStreamPrivate *priv =
+ meta_x11_selection_output_stream_get_instance_private (stream);
if (meta_x11_selection_output_stream_needs_flush (stream) &&
meta_x11_selection_output_stream_can_flush (stream))
meta_x11_selection_output_stream_perform_flush (stream);
- return G_SOURCE_REMOVE;
+ if (priv->delete_pending || priv->data->len > 0)
+ return G_SOURCE_CONTINUE;
+ else
+ return G_SOURCE_REMOVE;
}
static gssize
@@ -477,10 +482,9 @@ meta_x11_selection_output_stream_flush_async (GOutputStream *output_stream
}
}
+ g_assert (priv->pending_task == NULL);
+ priv->pending_task = task;
meta_x11_selection_output_stream_perform_flush (stream);
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
- return;
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]