Re: Why do a gtk/directfb process grows bigger and bigger ?
- From: Attilio Fiandrotti <attilio fiandrotti gmail com>
- To: gtk-devel-list gnome org
- Cc: Loïc Minier <lool+debian via ecp fr>
- Subject: Re: Why do a gtk/directfb process grows bigger and bigger ?
- Date: Mon, 18 Dec 2006 12:34:17 +0100
Attilio Fiandrotti wrote:
Hi
I recently noticed the the size of a generic gtk/dfb application 
considerably grows over time while the same application, but compiled 
for gtk/x11, does not.
The attached example aplication permanently sets up a window and an 
external box and at every proram's iteration a textview is created, 
packed into the external box and then destroyed.
Compiling for gtk/x11, the total amount of memory allocated by the 
process remains constant, while under gtk/dfb the process image size 
grown of some tens of KB every 3 or 4 iterations.
I wonder what's the reason of this difference: am i doing something 
wrong when i gtk_widget_destroy() the textview ? Is gtk/dfb leaking 
somewhere ?
I was eventually able to fix the leak by unreferencing the window after 
destruction (see attached patch).
I did some tests with different GTK applications and noticed that this 
patch produces warnings later like
(gleak:4341): Gdk-CRITICAL **: gdk_window_process_updates: assertion 
`GDK_IS_WINDOW (window)' failed
so, i guess this patch only tackles the issue but does not properly.
As i'm not gtk/gdk expert i'd really apreciate if someone expert in this 
could help in working out a proper fix.
We're very close Debian Etch release, but ATM we're currently leaking up 
to 20 MB for a complete installation: if someone could give a hand on 
this we still may have a chance to patch our sources in time for Etch.
thanks
Attilio
attilio liberta2:~/gtkdfb/src/gtk+/gdk/directfb$ diff -u gdkwindow-directfb.c.orig gdkwindow-directfb.c
--- gdkwindow-directfb.c.orig   2006-12-18 11:37:58.000000000 +0100
+++ gdkwindow-directfb.c        2006-12-18 11:38:21.000000000 +0100
@@ -613,6 +613,7 @@
                impl->window->Close(impl->window);
        impl->window->Release(impl->window);
   }
+  g_object_unref (window);
 #if 0 /* let the finalizer kill it */
   if (!recursing && !foreign_destroy)
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]