diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2012-07-27 08:49:41 +0000 |
---|---|---|
committer | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2012-07-27 08:49:41 +0000 |
commit | c2764ba5f3c77e61cd500afbf1e69f77bb70f38b (patch) | |
tree | c55feff4c1c63b02c5627804e5d341e97dec6619 /ui/gtk/gui_utils.c | |
parent | 40e809be57160d70d86df26759ac96cd1803bdcd (diff) |
Fix reference counting of GdkPixbuf, unref after creating GtkImage (aka fix memleaks)
Valgrind log:
= 47,616 bytes in 1 blocks are possibly lost in loss record 41,578 of 41,608
= at 0x4C26ABB: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
= by 0xAA2BA53: gdk_pixbuf_new (in /usr/lib64/libgdk_pixbuf-2.0.so.0.2200.1)
= by 0x10379F2F: ??? (in /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-xpm.so)
= by 0x1037A4FD: ??? (in /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-xpm.so)
= by 0xAA3132E: gdk_pixbuf_new_from_xpm_data (in /usr/lib64/libgdk_pixbuf-2.0.so.0.2200.1)
= by 0x4589B5: xpm_to_widget (gui_utils.c:572)
= by 0x4E3FC4: about_wireshark (about_dlg.c:86)
svn path=/trunk/; revision=44066
Diffstat (limited to 'ui/gtk/gui_utils.c')
-rw-r--r-- | ui/gtk/gui_utils.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/ui/gtk/gui_utils.c b/ui/gtk/gui_utils.c index 56a36eec64..f9cdd804f9 100644 --- a/ui/gtk/gui_utils.c +++ b/ui/gtk/gui_utils.c @@ -565,12 +565,20 @@ GtkWidget *xpm_to_widget_from_parent(GtkWidget *parent, const char ** xpm) { } #endif +static GtkWidget *_gtk_image_new_from_pixbuf_unref(GdkPixbuf *pixbuf) { + GtkWidget *widget; + + widget = gtk_image_new_from_pixbuf(pixbuf); + g_object_unref(pixbuf); + return widget; +} + /* convert an xpm to a GtkWidget */ GtkWidget *xpm_to_widget(const char ** xpm) { GdkPixbuf *pixbuf; pixbuf = gdk_pixbuf_new_from_xpm_data(xpm); - return gtk_image_new_from_pixbuf(pixbuf); + return _gtk_image_new_from_pixbuf_unref(pixbuf); } /* Convert an pixbuf data to a GtkWidget */ @@ -579,7 +587,7 @@ GtkWidget *pixbuf_to_widget(const char * pb_data) { GdkPixbuf *pixbuf; pixbuf = gdk_pixbuf_new_from_inline (-1, pb_data, FALSE, NULL); - return gtk_image_new_from_pixbuf(pixbuf); + return _gtk_image_new_from_pixbuf_unref(pixbuf); } /* |