[telepathy-gabble/master] Ref session peer in jingle_session_constructed.

Will Thompson will.thompson at collabora.co.uk
Tue Jun 9 06:47:38 PDT 2009


---
 src/jingle-session.c |   31 ++++++++++++++++++++++++-------
 1 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/src/jingle-session.c b/src/jingle-session.c
index f11a70a..28323b2 100644
--- a/src/jingle-session.c
+++ b/src/jingle-session.c
@@ -275,13 +275,7 @@ gabble_jingle_session_set_property (GObject *object,
       break;
     case PROP_PEER:
       sess->peer = g_value_get_uint (value);
-      if (sess->peer != 0)
-        {
-          TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (
-              (TpBaseConnection *) priv->conn, TP_HANDLE_TYPE_CONTACT);
-
-          tp_handle_ref (contact_repo, sess->peer);
-        }
+      /* priv->conn might not yet be set, so we'll ref this in constructed */
       break;
     case PROP_PEER_RESOURCE:
       g_free (priv->peer_resource);
@@ -312,6 +306,28 @@ gabble_jingle_session_set_property (GObject *object,
   }
 }
 
+static void
+gabble_jingle_session_constructed (GObject *object)
+{
+  void (*chain_up) (GObject *) =
+      G_OBJECT_CLASS (gabble_jingle_session_parent_class)->constructed;
+  GabbleJingleSession *self = GABBLE_JINGLE_SESSION (object);
+  GabbleJingleSessionPrivate *priv = self->priv;
+
+  if (chain_up != NULL)
+    chain_up (object);
+
+  g_assert (priv->conn != NULL);
+
+  if (self->peer != 0)
+    {
+      TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (
+          (TpBaseConnection *) priv->conn, TP_HANDLE_TYPE_CONTACT);
+
+      tp_handle_ref (contact_repo, self->peer);
+    }
+}
+
 GabbleJingleSession *
 gabble_jingle_session_new (GabbleConnection *connection,
                            const gchar *session_id,
@@ -338,6 +354,7 @@ gabble_jingle_session_class_init (GabbleJingleSessionClass *cls)
 
   g_type_class_add_private (cls, sizeof (GabbleJingleSessionPrivate));
 
+  object_class->constructed = gabble_jingle_session_constructed;
   object_class->get_property = gabble_jingle_session_get_property;
   object_class->set_property = gabble_jingle_session_set_property;
   object_class->dispose = gabble_jingle_session_dispose;
-- 
1.5.6.5




More information about the telepathy-commits mailing list