[rygel-grilo] Release dbus name when finalizing the server object
- From: Juan A. Suarez Romero <jasuarez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel-grilo] Release dbus name when finalizing the server object
- Date: Thu, 22 Apr 2010 14:30:59 +0000 (UTC)
commit c1328cb24dd3532055fbbc95e5afd74feb7a7896
Author: Juan A. Suarez Romero <jasuarez igalia com>
Date: Thu Apr 22 10:41:19 2010 +0200
Release dbus name when finalizing the server object
When the user frees a MS2Server object, this one is automatically unregistered
from dbus.
Nevertheless, the provider name requested to dbus still remains.
So release it too.
lib/media-server2-server.c | 54 +++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 53 insertions(+), 1 deletions(-)
---
diff --git a/lib/media-server2-server.c b/lib/media-server2-server.c
index 3eadbc2..f173fa7 100644
--- a/lib/media-server2-server.c
+++ b/lib/media-server2-server.c
@@ -44,11 +44,13 @@ enum {
/*
* Private MS2Server structure
+ * name: provider name
* data: holds stuff for owner
* get_children: function to get children
* get_properties: function to get properties
*/
struct _MS2ServerPrivate {
+ gchar *name;
gpointer *data;
GetChildrenFunc get_children;
GetPropertiesFunc get_properties;
@@ -240,7 +242,7 @@ ms2_server_dbus_register (MS2Server *server,
connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
if (!connection) {
g_printerr ("Could not connect to session bus, %s\n", error->message);
- g_clear_error (&error);
+ g_error_free (error);
return FALSE;
}
@@ -273,12 +275,59 @@ ms2_server_dbus_register (MS2Server *server,
return TRUE;
}
+static void
+ms2_server_dbus_unregister (MS2Server *server,
+ const gchar *name)
+{
+ DBusGConnection *connection;
+ DBusGProxy *gproxy;
+ GError *error = NULL;
+ gchar *dbus_name;
+ guint request_name_result;
+
+ connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+ if (!connection) {
+ g_printerr ("Could not connect to session bus, %s\n", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ gproxy = dbus_g_proxy_new_for_name (connection,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS);
+
+ /* Release name */
+ dbus_name = g_strconcat (MS2_DBUS_SERVICE_PREFIX, name, NULL);
+ org_freedesktop_DBus_release_name (gproxy,
+ dbus_name,
+ &request_name_result,
+ NULL);
+ g_free (dbus_name);
+ g_object_unref (gproxy);
+}
+
+static void
+ms2_server_finalize (GObject *object)
+{
+ MS2Server *server = MS2_SERVER (object);
+
+ ms2_server_dbus_unregister (server, server->priv->name);
+ g_free (server->priv->name);
+
+ G_OBJECT_CLASS (ms2_server_parent_class)->finalize (object);
+}
+
/* Class init function */
static void
ms2_server_class_init (MS2ServerClass *klass)
{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
g_type_class_add_private (klass, sizeof (MS2ServerPrivate));
+ gobject_class->finalize = ms2_server_finalize;
+
signals[UPDATED] = g_signal_new ("updated",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
@@ -492,9 +541,12 @@ ms2_server_new (const gchar *name,
{
MS2Server *server;
+ g_return_val_if_fail (name, NULL);
+
server = g_object_new (MS2_TYPE_SERVER, NULL);
server->priv->data = data;
+ server->priv->name = g_strdup (name);
/* Register object in DBus */
if (!ms2_server_dbus_register (server, name)) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]