[at-spi2-core] registryd: Wait for session manager to start before registering with it



commit e052585d5b796aa47c73c0f49eb31cf906c4e65f
Author: David Liang <liangchenye gmail com>
Date:   Sun Apr 27 15:03:08 2014 -0500

    registryd: Wait for session manager to start before registering with it
    
    We have a race where at-spi2-registryd tries to register with the session
    manager before it has fully initialized. Let's wait for a SessionRunning
    signal before initializing.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=728934

 registryd/registry-main.c |   24 +++++++++++++-----------
 1 files changed, 13 insertions(+), 11 deletions(-)
---
diff --git a/registryd/registry-main.c b/registryd/registry-main.c
index e8133fe..d7556c8 100644
--- a/registryd/registry-main.c
+++ b/registryd/registry-main.c
@@ -57,15 +57,20 @@ static GDBusProxy      *client_proxy = NULL;
 
 #define SM_CLIENT_DBUS_INTERFACE "org.gnome.SessionManager.ClientPrivate"
 
+static gboolean register_client (void);
+
 static void
-on_session_over (GDBusProxy *proxy,
-                 gchar      *sender_name,
-                 gchar      *signal_name,
-                 GVariant   *parameters,
-                 gpointer    user_data)
+on_session_signal (GDBusProxy *proxy,
+                   gchar      *sender_name,
+                   gchar      *signal_name,
+                   GVariant   *parameters,
+                   gpointer    user_data)
 {
         if (g_strcmp0 (signal_name, "SessionOver") == 0) {
                 g_main_loop_quit (mainloop);
+        } else if (g_strcmp0 (signal_name, "SessionRunning") == 0) {
+                if (!register_client ())
+                        g_warning ("Unable to register client with session manager");
         }
 }
 
@@ -79,7 +84,7 @@ session_manager_connect (void)
                                               SM_DBUS_INTERFACE, NULL, NULL);
 
         g_signal_connect (G_OBJECT (sm_proxy), "g-signal",
-                          G_CALLBACK (on_session_over), NULL);
+                          G_CALLBACK (on_session_signal), NULL);
 
         return (sm_proxy != NULL);
 }
@@ -87,7 +92,7 @@ session_manager_connect (void)
 static gboolean
 end_session_response (gboolean is_okay, const gchar *reason)
 {
-  GVariant *ret;
+        GVariant *ret;
         GError *error = NULL;
 
         if (!reason)
@@ -132,7 +137,7 @@ static gboolean
 register_client (void)
 {
         GError     *error;
-  GVariant *res;
+        GVariant *res;
         const char *startup_id;
         const char *app_id;
 
@@ -232,9 +237,6 @@ main (int argc, char **argv)
     {
       if (!session_manager_connect ())
           g_warning ("Unable to connect to session manager");
-
-      if (!register_client ())
-          g_warning ("Unable to register client with session manager");
     }
 
   g_main_loop_run (mainloop);


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