[Telepathy-commits] [telepathy-gabble/master] gabble_bytestream_ibb_close_received: wait write buffer is flushed before closing

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Tue Mar 10 04:42:31 PDT 2009


---
 src/bytestream-ibb.c |   24 +++++++++++++++++++-----
 1 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/src/bytestream-ibb.c b/src/bytestream-ibb.c
index 492cbc4..4966fb7 100644
--- a/src/bytestream-ibb.c
+++ b/src/bytestream-ibb.c
@@ -81,6 +81,7 @@ struct _GabbleBytestreamIBBPrivate
 
   guint16 seq;
   guint16 last_seq_recv;
+  LmMessage *close_iq_to_ack;
 
   /* We can't stop receving IBB data so if user wants to block the bytestream
    * we buffer them until he unblocks it. */
@@ -136,6 +137,13 @@ gabble_bytestream_ibb_dispose (GObject *object)
       gabble_bytestream_iface_close (GABBLE_BYTESTREAM_IFACE (self), NULL);
     }
 
+  if (priv->close_iq_to_ack != NULL)
+    {
+      _gabble_connection_acknowledge_set_iq (priv->conn, priv->close_iq_to_ack);
+      lm_message_unref (priv->close_iq_to_ack);
+      priv->close_iq_to_ack = NULL;
+    }
+
   G_OBJECT_CLASS (gabble_bytestream_ibb_parent_class)->dispose (object);
 }
 
@@ -367,6 +375,14 @@ send_close_stanza (GabbleBytestreamIBB *self)
   GabbleBytestreamIBBPrivate *priv = GABBLE_BYTESTREAM_IBB_GET_PRIVATE (self);
   LmMessage *msg;
 
+  if (priv->close_iq_to_ack != NULL)
+    {
+      /* We received a close IQ and just need to ACK it */
+      _gabble_connection_acknowledge_set_iq (priv->conn, priv->close_iq_to_ack);
+      lm_message_unref (priv->close_iq_to_ack);
+      priv->close_iq_to_ack = NULL;
+    }
+
   DEBUG ("send IBB close stanza");
 
   msg = lm_message_build (priv->peer_jid, LM_MESSAGE_TYPE_IQ,
@@ -926,12 +942,10 @@ gabble_bytestream_ibb_close_received (GabbleBytestreamIBB *self,
 {
   GabbleBytestreamIBBPrivate *priv = GABBLE_BYTESTREAM_IBB_GET_PRIVATE (self);
 
-  DEBUG ("received IBB close stanza. Bytestream closed");
-
-  g_object_set (self, "state", GABBLE_BYTESTREAM_STATE_CLOSED,
-      NULL);
+  DEBUG ("received IBB close stanza. Closing bytestream");
 
-  _gabble_connection_acknowledge_set_iq (priv->conn, iq);
+  priv->close_iq_to_ack = lm_message_ref (iq);
+  gabble_bytestream_ibb_close (GABBLE_BYTESTREAM_IFACE (self), NULL);
 }
 
 static void
-- 
1.5.6.5




More information about the telepathy-commits mailing list