aboutsummaryrefslogtreecommitdiffstats
path: root/ui/gtk/gui_utils.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2012-07-27 08:49:41 +0000
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2012-07-27 08:49:41 +0000
commitc2764ba5f3c77e61cd500afbf1e69f77bb70f38b (patch)
treec55feff4c1c63b02c5627804e5d341e97dec6619 /ui/gtk/gui_utils.c
parent40e809be57160d70d86df26759ac96cd1803bdcd (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.c12
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);
}
/*