[Telepathy-commits] [telepathy-salut/master] gibber-oob-file-transfer: disconnect the channel watcher when disposing so input_channel_readable_cb isn't called after object disposing

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Wed Nov 12 09:01:11 PST 2008


---
 lib/gibber/gibber-oob-file-transfer.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/lib/gibber/gibber-oob-file-transfer.c b/lib/gibber/gibber-oob-file-transfer.c
index b76a3ec..4894eb1 100644
--- a/lib/gibber/gibber-oob-file-transfer.c
+++ b/lib/gibber/gibber-oob-file-transfer.c
@@ -63,6 +63,8 @@ struct _GibberOobFileTransferPrivate
   guint64 transferred_bytes;
   /* whether the transfer has been cancelled */
   gboolean cancelled;
+  /* the watch id on the channel */
+  guint watch_id;
 };
 
 static void
@@ -108,6 +110,9 @@ gibber_oob_file_transfer_finalize (GObject *object)
 {
   GibberOobFileTransfer *self = GIBBER_OOB_FILE_TRANSFER (object);
 
+  if (self->priv->watch_id != 0)
+      g_source_remove (self->priv->watch_id);
+
   if (self->priv->server != NULL)
     {
       soup_server_quit (self->priv->server);
@@ -626,8 +631,8 @@ http_server_wrote_chunk_cb (SoupMessage *msg,
       self->priv->cancelled ? "cancelled" : "not cancelled");
   if (self->priv->channel && !self->priv->cancelled)
     {
-      g_io_add_watch (self->priv->channel, G_IO_IN | G_IO_HUP,
-          input_channel_readable_cb, self);
+      self->priv->watch_id = g_io_add_watch (self->priv->channel,
+          G_IO_IN | G_IO_HUP, input_channel_readable_cb, self);
     }
 }
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list