[mutter/gnome-3-34] x11: Unset pending flush flag right before notifying on task



commit 83eeb3dbd2ed71e9e7a4b6051214fffb3dd04f13
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat Apr 11 16:49:15 2020 +0200

    x11: Unset pending flush flag right before notifying on task
    
    Together with some other state. We can do this altogether on task
    notification, instead of lost somewhere in this function flow.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1198
    
    (cherry picked from commit e95c365cf01837862f87dea90190b47392ee7f67)

 src/x11/meta-x11-selection-output-stream.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
---
diff --git a/src/x11/meta-x11-selection-output-stream.c b/src/x11/meta-x11-selection-output-stream.c
index 435608faf..9928da6b2 100644
--- a/src/x11/meta-x11-selection-output-stream.c
+++ b/src/x11/meta-x11-selection-output-stream.c
@@ -250,8 +250,6 @@ meta_x11_selection_output_stream_perform_flush (MetaX11SelectionOutputStream *st
                        priv->data->data,
                        n_elements);
       g_byte_array_remove_range (priv->data, 0, n_elements * element_size);
-      if (priv->data->len == 0)
-        priv->flush_requested = FALSE;
     }
 
   meta_x11_selection_output_stream_notify_selection (stream);
@@ -266,6 +264,10 @@ meta_x11_selection_output_stream_perform_flush (MetaX11SelectionOutputStream *st
     {
       char error_str[100];
 
+      priv->flush_requested = FALSE;
+      priv->delete_pending = FALSE;
+      priv->pipe_error = TRUE;
+
       XGetErrorText (xdisplay, error_code, error_str, sizeof (error_str));
       g_task_return_new_error (priv->pending_task,
                                G_IO_ERROR,
@@ -273,12 +275,12 @@ meta_x11_selection_output_stream_perform_flush (MetaX11SelectionOutputStream *st
                                "Failed to flush selection output stream: %s",
                                error_str);
       g_clear_object (&priv->pending_task);
-      priv->pipe_error = TRUE;
     }
   else if (priv->pending_task)
     {
       size_t result;
 
+      priv->flush_requested = FALSE;
       result = GPOINTER_TO_SIZE (g_task_get_task_data (priv->pending_task));
       g_task_return_int (priv->pending_task, result);
       g_clear_object (&priv->pending_task);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]