summaryrefslogtreecommitdiff
path: root/gnome-settings-daemon
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2013-07-24 15:08:39 +0200
committerBastien Nocera <hadess@hadess.net>2013-07-24 15:17:15 +0200
commitf8bcc020c630aa8d8ecd1a7f5acda564fbd43d15 (patch)
treebf41105a0161c5446c84ec01fb3306e2d310306a /gnome-settings-daemon
parent2dac931a641f990313f91acf9ff590e3d4b9f477 (diff)
downloadgnome-settings-daemon-f8bcc020c630aa8d8ecd1a7f5acda564fbd43d15.tar.gz
main: Use GCancellable
And check for g_dbus_connection_register_object()'s retval. https://bugzilla.gnome.org/show_bug.cgi?id=704791
Diffstat (limited to 'gnome-settings-daemon')
-rw-r--r--gnome-settings-daemon/gnome-settings-manager.c35
1 files changed, 26 insertions, 9 deletions
diff --git a/gnome-settings-daemon/gnome-settings-manager.c b/gnome-settings-daemon/gnome-settings-manager.c
index 42236701..01db943d 100644
--- a/gnome-settings-daemon/gnome-settings-manager.c
+++ b/gnome-settings-daemon/gnome-settings-manager.c
@@ -62,6 +62,9 @@ struct GnomeSettingsManagerPrivate
guint owner_id;
GDBusNodeInfo *introspection_data;
GDBusConnection *connection;
+ guint dbus_register_object_id;
+ GCancellable *cancellable;
+
GSettings *settings;
char **whitelist;
GnomePnpIds *pnp_ids;
@@ -348,19 +351,21 @@ on_bus_gotten (GObject *source_object,
connection = g_bus_get_finish (res, &error);
if (connection == NULL) {
- g_warning ("Could not get session bus: %s", error->message);
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_warning ("Could not get session bus: %s", error->message);
g_error_free (error);
return;
}
manager->priv->connection = connection;
- g_dbus_connection_register_object (connection,
- GSD_DBUS_PATH,
- manager->priv->introspection_data->interfaces[0],
- NULL,
- NULL,
- NULL,
- NULL);
+ manager->priv->dbus_register_object_id = g_dbus_connection_register_object (connection,
+ GSD_DBUS_PATH,
+ manager->priv->introspection_data->interfaces[0],
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ g_assert (manager->priv->dbus_register_object_id > 0);
}
static void
@@ -369,8 +374,10 @@ register_manager (GnomeSettingsManager *manager)
manager->priv->introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
g_assert (manager->priv->introspection_data != NULL);
+ manager->priv->cancellable = g_cancellable_new ();
+
g_bus_get (G_BUS_TYPE_SESSION,
- NULL,
+ manager->priv->cancellable,
(GAsyncReadyCallback) on_bus_gotten,
manager);
}
@@ -421,14 +428,24 @@ gnome_settings_manager_stop (GnomeSettingsManager *manager)
_unload_all (manager);
+ if (manager->priv->cancellable) {
+ g_cancellable_cancel (manager->priv->cancellable);
+ g_clear_object (&manager->priv->cancellable);
+ }
if (manager->priv->owner_id > 0) {
g_bus_unown_name (manager->priv->owner_id);
manager->priv->owner_id = 0;
}
+ if (manager->priv->dbus_register_object_id > 0) {
+ g_dbus_connection_unregister_object (manager->priv->connection,
+ manager->priv->dbus_register_object_id);
+ manager->priv->dbus_register_object_id = 0;
+ }
g_clear_pointer (&manager->priv->whitelist, g_strfreev);
g_clear_object (&manager->priv->settings);
g_clear_object (&manager->priv->pnp_ids);
+ g_clear_object (&manager->priv->connection);
}
static void