[Telepathy-commits] [telepathy-gabble/master] socks5: ensure to keep the bytestream alive in transport_handler

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Tue Mar 17 09:43:15 PDT 2009


---
 src/bytestream-socks5.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/src/bytestream-socks5.c b/src/bytestream-socks5.c
index 446b598..7b2fb7f 100644
--- a/src/bytestream-socks5.c
+++ b/src/bytestream-socks5.c
@@ -950,6 +950,11 @@ transport_handler (GibberTransport *transport,
   g_string_append_len (priv->read_buffer, (const gchar *) data->data,
       data->length);
 
+  /* If something goes wrong in socks5_handle_received_data, the bytestream
+   * could be closed and disposed. Ref it to artificially keep this bytestream
+   * object alive while we are in this function. */
+  g_object_ref (self);
+
   do
     {
       /* socks5_handle_received_data() processes the data and returns the
@@ -960,11 +965,13 @@ transport_handler (GibberTransport *transport,
       if (priv->read_buffer == NULL)
         /* If something did wrong in socks5_handle_received_data, the
          * bytestream can be closed and so destroyed. */
-        return;
+        break;
 
       g_string_erase (priv->read_buffer, 0, used_bytes);
     }
   while (used_bytes > 0 && priv->read_buffer->len > 0);
+
+  g_object_unref (self);
 }
 
 static void
-- 
1.5.6.5




More information about the telepathy-commits mailing list