diff options
author | David Liang <liangchenye@gmail.com> | 2014-04-27 15:03:08 -0500 |
---|---|---|
committer | Mike Gorse <mgorse@suse.com> | 2014-04-27 15:03:08 -0500 |
commit | e052585d5b796aa47c73c0f49eb31cf906c4e65f (patch) | |
tree | 7800eb9df26b9ab10dafe95529c4550d939c3ced | |
parent | b62063e1fe017b7db94bdec212d0896de536abe3 (diff) | |
download | at-spi2-core-e052585d5b796aa47c73c0f49eb31cf906c4e65f.tar.gz |
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
-rw-r--r-- | 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 e8133fe7..d7556c8a 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); |