[mutter] xwayland: Do not retry the same display



commit 26cc51a1a5345e42cd36dcf3668d5592dcc85f30
Author: Olivier Fourdan <ofourdan redhat com>
Date:   Thu Jan 21 18:02:21 2021 +0100

    xwayland: Do not retry the same display
    
    Mutter listens to two display connections, one for regular X11 clients
    and another one for the so called "managed services".
    
    Once an available display number is found for the regular X11 clients,
    mutter would then redo the work to find another available display number
    for the managed services.
    
    Yet, it does so starting from the same initial display, which is a waste
    of time since it just tried all displays to find the first available
    one, so all these, including the regular display it just took, are now
    in use.
    
    So instead of starting over from the beginning when looking for a
    display available for the managed services, continue from the next
    display immediately after the one we found precedently.
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1680>

 src/wayland/meta-xwayland.c | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)
---
diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c
index 9d2e608aa3..8c2ec1e75d 100644
--- a/src/wayland/meta-xwayland.c
+++ b/src/wayland/meta-xwayland.c
@@ -664,17 +664,12 @@ open_display_sockets (MetaXWaylandManager  *manager,
 static gboolean
 choose_xdisplay (MetaXWaylandManager     *manager,
                  MetaXWaylandConnection  *connection,
+                 int                     *display,
                  GError                 **error)
 {
-  int display = 0;
   int number_of_tries = 0;
   char *lock_file = NULL;
 
-  if (display_number_override != -1)
-    display = display_number_override;
-  else if (g_getenv ("RUNNING_UNDER_GDM"))
-    display = 1024;
-
   if (!ensure_x11_unix_dir (error))
     return FALSE;
 
@@ -682,7 +677,7 @@ choose_xdisplay (MetaXWaylandManager     *manager,
     {
       g_autoptr (GError) local_error = NULL;
 
-      lock_file = create_lock_file (display, &display, &local_error);
+      lock_file = create_lock_file (*display, display, &local_error);
       if (!lock_file)
         {
           g_prefix_error (&local_error, "Failed to create an X lock file: ");
@@ -690,7 +685,7 @@ choose_xdisplay (MetaXWaylandManager     *manager,
           return FALSE;
         }
 
-      if (!open_display_sockets (manager, display,
+      if (!open_display_sockets (manager, *display,
                                  &connection->abstract_fd,
                                  &connection->unix_fd,
                                  &local_error))
@@ -704,7 +699,7 @@ choose_xdisplay (MetaXWaylandManager     *manager,
               return FALSE;
             }
 
-          display++;
+          (*display)++;
           continue;
         }
 
@@ -712,7 +707,7 @@ choose_xdisplay (MetaXWaylandManager     *manager,
     }
   while (1);
 
-  connection->display_index = display;
+  connection->display_index = *display;
   connection->name = g_strdup_printf (":%d", connection->display_index);
   connection->lock_file = lock_file;
 
@@ -1055,12 +1050,21 @@ meta_xwayland_init (MetaXWaylandManager  *manager,
                     GError              **error)
 {
   MetaDisplayPolicy policy;
+  int display = 0;
+
+  if (display_number_override != -1)
+    display = display_number_override;
+  else if (g_getenv ("RUNNING_UNDER_GDM"))
+    display = 1024;
+
 
   if (!manager->public_connection.name)
     {
-      if (!choose_xdisplay (manager, &manager->public_connection, error))
+      if (!choose_xdisplay (manager, &manager->public_connection, &display, error))
         return FALSE;
-      if (!choose_xdisplay (manager, &manager->private_connection, error))
+
+      display++;
+      if (!choose_xdisplay (manager, &manager->private_connection, &display, error))
         return FALSE;
 
       if (!prepare_auth_file (manager, error))


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