[Pkg-telepathy-commits] [telepathy-glib-1] 165/212: tp_svc_interface_skeleton_emit_signal: ignore if no longer exported

Simon McVittie smcv at debian.org
Wed May 14 12:09:10 UTC 2014


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch debian
in repository telepathy-glib-1.

commit 48ae67d2a11249eca3a588736f825bac4df3fb9d
Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Fri Apr 11 13:04:18 2014 +0100

    tp_svc_interface_skeleton_emit_signal: ignore if no longer exported
    
    Because GDBusObjectSkeleton holds a ref to all its interface skeletons
    as long as the parent object exists, it's possible that they will
    have been unexported but not freed.
    
    Reviewed-by: Xavier Claessens <xavier.claessens at collabora.com>
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=77189
---
 telepathy-glib/svc-interface-skeleton.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/telepathy-glib/svc-interface-skeleton.c b/telepathy-glib/svc-interface-skeleton.c
index 246baac..9a2a920 100644
--- a/telepathy-glib/svc-interface-skeleton.c
+++ b/telepathy-glib/svc-interface-skeleton.c
@@ -220,6 +220,8 @@ tp_svc_interface_skeleton_emit_signal (GClosure *closure,
   SignalClosure *sc = (SignalClosure *) closure;
   TpSvcInterfaceSkeleton *self = sc->self;
   GDBusInterfaceSkeleton *skel = G_DBUS_INTERFACE_SKELETON (self);
+  GDBusConnection *connection =
+    g_dbus_interface_skeleton_get_connection (skel);
   const gchar *path = g_dbus_interface_skeleton_get_object_path (skel);
   GVariantBuilder builder;
   guint i;
@@ -227,6 +229,12 @@ tp_svc_interface_skeleton_emit_signal (GClosure *closure,
   DEBUG ("%s.%s from %s %p", self->priv->iinfo->interface_info->name,
       sc->name, path, self);
 
+  if (path == NULL || connection == NULL)
+    {
+      DEBUG ("- ignoring, object no longer exported");
+      return;
+    }
+
   g_variant_builder_init (&builder, G_VARIANT_TYPE_TUPLE);
 
   /* Skip parameter 0, which is the GObject. */
@@ -235,10 +243,9 @@ tp_svc_interface_skeleton_emit_signal (GClosure *closure,
         dbus_g_value_build_g_variant (param_values + i));
 
   /* we only support being exported on one connection */
-  g_dbus_connection_emit_signal (
-      g_dbus_interface_skeleton_get_connection (skel),
+  g_dbus_connection_emit_signal (connection,
       NULL, /* broadcast */
-      g_dbus_interface_skeleton_get_object_path (skel),
+      path,
       self->priv->iinfo->interface_info->name,
       sc->name,
       /* consume floating ref */

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-telepathy/telepathy-glib-1.git



More information about the Pkg-telepathy-commits mailing list