summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Liang <liangchenye@gmail.com>2014-04-27 15:03:08 -0500
committerMike Gorse <mgorse@suse.com>2014-04-27 15:03:08 -0500
commite052585d5b796aa47c73c0f49eb31cf906c4e65f (patch)
tree7800eb9df26b9ab10dafe95529c4550d939c3ced
parentb62063e1fe017b7db94bdec212d0896de536abe3 (diff)
downloadat-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.c24
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);