]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
2005-05-03 Ross Burton <ross@burtonini.com>
authorColin Walters <walters@verbum.org>
Tue, 3 May 2005 17:45:30 +0000 (17:45 +0000)
committerColin Walters <walters@verbum.org>
Tue, 3 May 2005 17:45:30 +0000 (17:45 +0000)
* glib/dbus-gobject.c (dbus_g_connection_register_g_object):
Return if we get an error during registration.  Set up a
weak reference on object to unregister if object is destroyed.
(unregister_gobject): New function.

ChangeLog
glib/dbus-gobject.c

index 8d044389b81342cfdb5ee315e5715602def56b6b..e903e1bc320398daf93032d7f77a9eb77abb6207 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2005-05-03  Ross Burton  <ross@burtonini.com>
+
+       * glib/dbus-gobject.c (dbus_g_connection_register_g_object):
+       Return if we get an error during registration.  Set up a
+       weak reference on object to unregister if object is destroyed.
+       (unregister_gobject): New function.
+       
 2005-05-01  John (J5) Palmieri  <johnp@redhat.com>
 
        * python/dbus_bindings.pyx.in: 
index 7ab4dd1b2ae27470ab08bbdd9fd0d29a01de7554..09fc97fc72aca35d4ab443108b6fabdf4713c8b0 100644 (file)
@@ -1048,6 +1048,15 @@ dbus_g_object_class_install_info (GObjectClass          *object_class,
   g_static_rw_lock_writer_unlock (&info_hash_lock);
 }
 
+static void
+unregister_gobject (DBusGConnection *connection, GObject *dead)
+{
+  char *path;
+  path = g_object_steal_data (dead, "dbus_glib_object_path");
+  dbus_connection_unregister_object_path (DBUS_CONNECTION_FROM_G_CONNECTION (connection), path);
+  g_free (path);
+}
+
 /**
  * Registers a GObject at the given path. Properties, methods, and signals
  * of the object can then be accessed remotely. Methods are only available
@@ -1073,12 +1082,13 @@ dbus_g_connection_register_g_object (DBusGConnection       *connection,
   if (!dbus_connection_register_object_path (DBUS_CONNECTION_FROM_G_CONNECTION (connection),
                                              at_path,
                                              &gobject_dbus_vtable,
-                                             object))
+                                             object)) {
     g_error ("Failed to register GObject with DBusConnection");
+    return;
+  }
 
-  /* FIXME set up memory management (so we break the
-   * registration if object or connection vanishes)
-   */
+  g_object_set_data (object, "dbus_glib_object_path", g_strdup (at_path));
+  g_object_weak_ref (object, (GWeakNotify)unregister_gobject, connection);
 }
 
 /** @} */ /* end of public API */