[grisbi-test] [PATCH 6/6] fix memory leaks when use gsb_select_icon_resize_logo_pixbuf ()

pbiava pierre.biava at nerim.net
Ven 19 Juil 20:24:32 CEST 2013


---
 src/gsb_file_load.c   | 3 +++
 src/gsb_select_icon.c | 9 +++++----
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/gsb_file_load.c b/src/gsb_file_load.c
index 4b0ec21..24c3b84 100644
--- a/src/gsb_file_load.c
+++ b/src/gsb_file_load.c
@@ -937,6 +937,7 @@ void gsb_file_load_general_part ( const gchar **attribute_names,
                         pixbuf = gdk_pixbuf_new_from_file ( chemin_logo, NULL );
                         gtk_window_set_default_icon ( pixbuf );
                         gsb_select_icon_set_logo_pixbuf ( pixbuf );
+                        g_object_unref ( G_OBJECT ( pixbuf ) );
                         g_free ( chemin_logo );
                     }
                 }
@@ -979,6 +980,7 @@ void gsb_file_load_general_part ( const gchar **attribute_names,
                     {
                         gtk_window_set_default_icon ( pixbuf );
                         gsb_select_icon_set_logo_pixbuf ( pixbuf );
+                        g_object_unref ( G_OBJECT ( pixbuf ) );
                     }
                 }
 
@@ -6771,6 +6773,7 @@ void gsb_file_load_general_part_before_0_6 ( GMarkupParseContext *context,
         {
             gtk_window_set_default_icon ( pixbuf );
             gsb_select_icon_set_logo_pixbuf ( pixbuf );
+            g_object_unref ( G_OBJECT ( pixbuf ) );
         }
         if ( chemin_logo && strlen (chemin_logo) > 0 )
             g_free ( chemin_logo );
diff --git a/src/gsb_select_icon.c b/src/gsb_select_icon.c
index 730eb8b..4b95660 100644
--- a/src/gsb_select_icon.c
+++ b/src/gsb_select_icon.c
@@ -672,7 +672,11 @@ GdkPixbuf *gsb_select_icon_get_default_logo_pixbuf ( void )
     if ( gdk_pixbuf_get_width (pixbuf) > LOGO_WIDTH ||
 	     gdk_pixbuf_get_height (pixbuf) > LOGO_HEIGHT )
     {
-        return gsb_select_icon_resize_logo_pixbuf ( pixbuf );
+        GdkPixbuf *tmp_pixbuf;
+
+        tmp_pixbuf = gsb_select_icon_resize_logo_pixbuf ( pixbuf );
+        g_object_unref ( G_OBJECT ( pixbuf ) );
+        return tmp_pixbuf;
 	}
     else
         return pixbuf;
@@ -726,9 +730,6 @@ GdkPixbuf *gsb_select_icon_resize_logo_pixbuf ( GdkPixbuf *pixbuf )
         ratio_height ++;
     ratio = ( ratio_width > ratio_height ) ? ratio_width : ratio_height;
 
-    tmp = gdk_pixbuf_new ( GDK_COLORSPACE_RGB, TRUE, 8,
-               gdk_pixbuf_get_width ( pixbuf )/ratio,
-               gdk_pixbuf_get_height ( pixbuf )/ratio );
     tmp = gdk_pixbuf_scale_simple ( pixbuf,
                         gdk_pixbuf_get_width ( pixbuf )/ratio,
                         gdk_pixbuf_get_height ( pixbuf )/ratio,
-- 
1.8.1.5



Plus d'informations sur la liste de diffusion test