Hi, I dont have any pixmaps or images in my sample application. I have attached my program. Its a simple program having two windows. First window has 2 buttons open and close. When open is clicked it opens another widow which has a close button. When close button on second window is pressed second window is destroyed. Its here that i observe leaks. Memory increases when second window is created and when its destroyed memory is not freed at all on DirectFB bacend. Am i calling the correct APIs? Help is greatly appreciated. Somehow i feel destroy is not happening properly! -- Regards, Harinandan S On Wed, May 14, 2008 at 12:49 PM, <jcupitt@xxxxxxxxx> wrote: > 2008/5/14 Harinandan S <harinandans@xxxxxxxxx>: > > I observed continuous accumulation of memory while running GTK over > > DirectFB on MontaVista linux on TI Davinci. I also observed > > significant memory accumulation while running GTK-win32 on Windows XP. > > But to my surprise there is no accumulation of memory > > on GTK-X window running on RHEL 4 on x86. > > I'm only speculating, but some resources (server-side images or > pixmaps, for example) are kept by the X server and won't show > significant memuse for your application in "top". With other backends, > like win32 or directfb, you may well see these objects in your own > memory space. > > I'd suggest running with valgrind and looking for leaks with that. For > what it's worth, my largish project (250 kloc or so) does not seem to > leak significantly under linux or windows. > > John >
#include <gtk/gtk.h> GtkWidget* create_window1 (void); GtkWidget* create_window2 (void); void on_open_clicked (GtkButton *button, gpointer user_data) { /* open a pop-up window */ GtkWidget *window2 = create_window2 (); gtk_widget_show (window2); } void on_close_clicked (GtkButton *button, gpointer user_data) { GtkWidget *window = user_data; gtk_widget_destroy(window); } GtkWidget* create_window1 (void) { GtkWidget *window1; GtkWidget *fixed1; GtkWidget *open; GtkWidget *close; window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request (window1, 640, 480); gtk_window_set_title (GTK_WINDOW (window1), "window1"); fixed1 = gtk_fixed_new (); gtk_widget_show (fixed1); gtk_container_add (GTK_CONTAINER (window1), fixed1); open = gtk_button_new_with_mnemonic ("open"); gtk_widget_show (open); gtk_fixed_put (GTK_FIXED (fixed1), open, 208, 200); gtk_widget_set_size_request (open, 64, 40); close = gtk_button_new_with_mnemonic ("close"); gtk_widget_show (close); gtk_fixed_put (GTK_FIXED (fixed1), close, 296, 200); gtk_widget_set_size_request (close, 72, 40); /* send pointer to window1 to callback function */ g_signal_connect ((gpointer) open, "clicked", G_CALLBACK (on_open_clicked), window1); g_signal_connect ((gpointer) close, "clicked", G_CALLBACK (on_close_clicked), window1); return window1; } GtkWidget* create_window2 (void) { GtkWidget *window2; GtkWidget *fixed2; GtkWidget *close; window2 = gtk_window_new (GTK_WINDOW_POPUP); gtk_widget_set_size_request (window2, 320, 240); gtk_window_set_title (GTK_WINDOW (window2), "window2"); fixed2 = gtk_fixed_new (); gtk_widget_show (fixed2); gtk_container_add (GTK_CONTAINER (window2), fixed2); close = gtk_button_new_with_mnemonic ("close"); gtk_widget_show (close); gtk_fixed_put (GTK_FIXED (fixed2), close, 144, 112); gtk_widget_set_size_request (close, 80, 48); g_signal_connect ((gpointer) close, "clicked", G_CALLBACK (on_close_clicked), window2); return window2; } int main (int argc, char *argv[]) { GtkWidget *window1; gtk_init (&argc, &argv); /* create top window*/ window1 = create_window1 (); gtk_widget_show (window1); g_signal_connect ((gpointer) window1, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_main (); return 0; }
_______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx http://mail.gnome.org/mailman/listinfo/gtk-list