[mutter/wip/ssd-black-borders-fix: 13/22] window: always disarm XSYNC watchdog when X client responds



commit 3488015d176ba248d8b7e251e6eba979ab8bcae7
Author: Ray Strode <rstrode redhat com>
Date:   Wed Feb 28 16:54:14 2018 -0500

    window: always disarm XSYNC watchdog when X client responds
    
    At the moment we only disarm the watchdog timer set up for SYNC counter
    requests if we're in the middle of a resize operation.
    
    It's possible that the resize operation finished prematurely by the user
    letting go of the mouse before the client responded.  If that happens, when the
    client finally updates mutter will erroneously still have the watchdog timer
    engaged from before until it times out, leading to resizes for the next second
    or so to not get processed, and the client to get blacklisted from future sync
    requests.

 src/x11/window-x11.c | 46 +++++++++++++++++++++++++---------------------
 1 file changed, 25 insertions(+), 21 deletions(-)
---
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
index e819c1b67..f2a82a217 100644
--- a/src/x11/window-x11.c
+++ b/src/x11/window-x11.c
@@ -3496,27 +3496,31 @@ meta_window_x11_update_sync_request_counter (MetaWindow *window,
   window->sync_request_serial = new_counter_value;
   meta_compositor_sync_updates_frozen (window->display->compositor, window);
 
-  if (window == window->display->grab_window &&
-      meta_grab_op_is_resizing (window->display->grab_op) &&
-      new_counter_value >= window->sync_request_wait_serial &&
-      (!window->extended_sync_request_counter || new_counter_value % 2 == 0) &&
-      window->sync_request_timeout_id)
-    {
-      meta_topic (META_DEBUG_RESIZING,
-                  "Alarm event received last motion x = %d y = %d\n",
-                  window->display->grab_latest_motion_x,
-                  window->display->grab_latest_motion_y);
-
-      g_source_remove (window->sync_request_timeout_id);
-      window->sync_request_timeout_id = 0;
-
-      /* This means we are ready for another configure;
-       * no pointer round trip here, to keep in sync */
-      meta_window_update_resize (window,
-                                 window->display->grab_last_user_action_was_snap,
-                                 window->display->grab_latest_motion_x,
-                                 window->display->grab_latest_motion_y,
-                                 TRUE);
+  if (new_counter_value >= window->sync_request_wait_serial && window->sync_request_timeout_id)
+    {
+       if (!window->extended_sync_request_counter || new_counter_value % 2 == 0)
+         {
+          g_source_remove (window->sync_request_timeout_id);
+          window->sync_request_timeout_id = 0;
+        }
+
+       if (window == window->display->grab_window &&
+           meta_grab_op_is_resizing (window->display->grab_op) &&
+           (!window->extended_sync_request_counter || new_counter_value % 2 == 0))
+         {
+           meta_topic (META_DEBUG_RESIZING,
+                       "Alarm event received last motion x = %d y = %d\n",
+                        window->display->grab_latest_motion_x,
+                        window->display->grab_latest_motion_y);
+
+           /* This means we are ready for another configure;
+            * no pointer round trip here, to keep in sync */
+           meta_window_update_resize (window,
+                                       window->display->grab_last_user_action_was_snap,
+                                       window->display->grab_latest_motion_x,
+                                       window->display->grab_latest_motion_y,
+                                       TRUE);
+         }
     }
 
   /* If sync was previously disabled, turn it back on and hope


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