[telepathy-glib/master] Assert that connecting to Group signals works

Will Thompson will.thompson at collabora.co.uk
Fri May 15 08:34:47 PDT 2009


---
 telepathy-glib/channel-group.c |   51 ++++++++++++++++++++++++++++++++--------
 1 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/telepathy-glib/channel-group.c b/telepathy-glib/channel-group.c
index ba17108..0e65edc 100644
--- a/telepathy-glib/channel-group.c
+++ b/telepathy-glib/channel-group.c
@@ -1099,6 +1099,10 @@ tp_channel_group_flags_changed_cb (TpChannel *self,
 void
 _tp_channel_get_group_properties (TpChannel *self)
 {
+  TpChannelPrivate *priv = self->priv;
+  TpProxySignalConnection *sc;
+  GError *error = NULL;
+
   if (!tp_proxy_has_interface_by_id (self,
         TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP))
     {
@@ -1109,22 +1113,49 @@ _tp_channel_get_group_properties (TpChannel *self)
 
   DEBUG ("%p", self);
 
-  self->priv->members_changed_sig =
+  /* If this callback has been called, 'self' has not been invalidated. And we
+   * just checked above that the proxy has the Group interface. So, connecting
+   * to these signals must succeed. */
+#define DIE(sig) \
+  { \
+    g_critical ("couldn't connect to " sig ": %s", error->message); \
+    g_assert_not_reached (); \
+    g_error_free (error); \
+    return; \
+  }
+
+  priv->members_changed_sig =
       tp_cli_channel_interface_group_connect_to_members_changed (self,
-          tp_channel_group_members_changed_cb, NULL, NULL, NULL, NULL);
+          tp_channel_group_members_changed_cb, NULL, NULL, NULL, &error);
 
-  self->priv->members_changed_detailed_sig =
+  if (priv->members_changed_sig == NULL)
+    DIE ("MembersChanged");
+
+  priv->members_changed_detailed_sig =
       tp_cli_channel_interface_group_connect_to_members_changed_detailed (self,
-          tp_channel_group_members_changed_detailed_cb, NULL, NULL, NULL, NULL);
+          tp_channel_group_members_changed_detailed_cb, NULL, NULL, NULL,
+          &error);
+
+  if (priv->members_changed_detailed_sig == NULL)
+    DIE ("MembersChangedDetailed");
+
+  sc = tp_cli_channel_interface_group_connect_to_group_flags_changed (self,
+      tp_channel_group_flags_changed_cb, NULL, NULL, NULL, &error);
+
+  if (sc == NULL)
+    DIE ("GroupFlagsChanged");
+
+  sc = tp_cli_channel_interface_group_connect_to_self_handle_changed (self,
+      tp_channel_group_self_handle_changed_cb, NULL, NULL, NULL, &error);
 
-  tp_cli_channel_interface_group_connect_to_group_flags_changed (self,
-      tp_channel_group_flags_changed_cb, NULL, NULL, NULL, NULL);
+  if (sc == NULL)
+    DIE ("SelfHandleChanged");
 
-  tp_cli_channel_interface_group_connect_to_self_handle_changed (self,
-      tp_channel_group_self_handle_changed_cb, NULL, NULL, NULL, NULL);
+  sc = tp_cli_channel_interface_group_connect_to_handle_owners_changed (self,
+      tp_channel_handle_owners_changed_cb, NULL, NULL, NULL, &error);
 
-  tp_cli_channel_interface_group_connect_to_handle_owners_changed (self,
-      tp_channel_handle_owners_changed_cb, NULL, NULL, NULL, NULL);
+  if (sc == NULL)
+    DIE ("HandleOwnersChanged");
 
   /* First try the 0.17 API (properties). If this fails we'll fall back */
   tp_cli_dbus_properties_call_get_all (self, -1,
-- 
1.5.6.5




More information about the telepathy-commits mailing list