From 54035ac294a8544e41d0ec590ab0dbc0370e410b Mon Sep 17 00:00:00 2001 From: Stephan Arts Date: Thu, 11 Aug 2011 22:30:54 +0200 Subject: [PATCH 1/3] Fix memory leak --- src/image.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/src/image.c b/src/image.c index 09fe562..987316d 100644 --- a/src/image.c +++ b/src/image.c @@ -639,6 +639,7 @@ cb_rstto_image_read_input_stream_ready (GObject *source_object, GAsyncResult *re if(gdk_pixbuf_loader_write (image->priv->loader, (const guchar *)image->priv->buffer, read_bytes, &error) == FALSE) { g_input_stream_close (G_INPUT_STREAM (source_object), NULL, NULL); + g_object_unref (source_object); g_object_unref (image); } else @@ -659,6 +660,7 @@ cb_rstto_image_read_input_stream_ready (GObject *source_object, GAsyncResult *re { /* OK */ g_input_stream_close (G_INPUT_STREAM (source_object), NULL, NULL); + g_object_unref (source_object); gdk_pixbuf_loader_close (image->priv->loader, NULL); g_object_unref (image); } @@ -666,6 +668,7 @@ cb_rstto_image_read_input_stream_ready (GObject *source_object, GAsyncResult *re { /* I/O ERROR */ g_input_stream_close (G_INPUT_STREAM (source_object), NULL, NULL); + g_object_unref (source_object); gdk_pixbuf_loader_close (image->priv->loader, NULL); g_object_unref (image); } -- 1.7.5.4 From 8dfd7b9e3d455ccd76a454bd22472df1a06226d9 Mon Sep 17 00:00:00 2001 From: Stephan Arts Date: Sat, 6 Aug 2011 12:01:26 +0200 Subject: [PATCH 2/3] Emit the 'iter-changed' signal when the image-list is empty. --- src/image_list.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/src/image_list.c b/src/image_list.c index 7f7af18..1344f3c 100644 --- a/src/image_list.c +++ b/src/image_list.c @@ -269,6 +269,7 @@ rstto_image_list_remove_image (RsttoImageList *image_list, RsttoImage *image) if (rstto_image_list_iter_get_image (iter->data) == image) { ((RsttoImageListIter *)(iter->data))->priv->image = NULL; + g_signal_emit (G_OBJECT (iter->data), rstto_image_list_iter_signals[RSTTO_IMAGE_LIST_ITER_SIGNAL_CHANGED], 0, NULL); } } iter = g_slist_next (iter); -- 1.7.5.4 From 4ba20c52980d31f508369a6a2dff6a67bfa2bae1 Mon Sep 17 00:00:00 2001 From: Stephan Arts Date: Fri, 12 Aug 2011 08:02:34 +0200 Subject: [PATCH 3/3] Free gtkanimationiter --- src/image.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/src/image.c b/src/image.c index 987316d..4ce323f 100644 --- a/src/image.c +++ b/src/image.c @@ -725,6 +725,19 @@ static void cb_rstto_image_area_prepared (GdkPixbufLoader *loader, RsttoImage *image) { gint timeout = 0; + + if (image->priv->animation) + { + g_object_unref (image->priv->animation); + image->priv->animation = NULL; + } + + if (image->priv->iter) + { + g_object_unref (image->priv->iter); + image->priv->iter = NULL; + } + image->priv->animation = gdk_pixbuf_loader_get_animation (loader); image->priv->iter = gdk_pixbuf_animation_get_iter (image->priv->animation, NULL); if (image->priv->pixbuf) -- 1.7.5.4