Mátyás János wrote:
> Hi,
> 
> I'm looking for memory leaks in a python application and found leaks in
> matplotlib. The application is graphic intensive. Each time it updates
> the screen, matplotlib allocates another 5-10 megabytes memory for the
> new gtk.gdk.Pixbuf and gtk.gdk.GCX11 while does not free up the buffers
> allocated for the previous content.
> 

This sounds to me like a pygtk bug, not a matplotlib bug; a gtk object 
is hanging around after its reference has been deleted. What versions of 
gtk and pygtk are you using?  This sounds dimly familiar.  I don't know 
enough about gtk and pygtk to help, but I am sure the people who do know 
more will want to know the version.

Eric

> I switched on garbage collection debugging with:
> 
> import gc
> gc.enable()
> gc.set_debug(gc.DEBUG_LEAK)
> 
> and tried to delete the leaking objects:
> 
> --- ./lib/matplotlib/backends/backend_gtkagg.py 2008-06-23
> 04:09:29.000000000 +0200 ++
> + 
> /usr/lib/python2.4/site-packages/matplotlib-0.91.4-py2.4-linux-i686.egg/matplotlib/backends/backend_gtkagg.py
> 2008-10-02 00:05:32.000000000 +0200 @@ -3,6 +3,7 @@ """
>  from __future__ import division
>  import os
> +import gc
> 
>  import matplotlib
>  from matplotlib.figure import Figure
> @@ -82,8 +83,17 @@
>          h = int(ren.height)
>          pixbuf = gtk.gdk.pixbuf_new_from_data(
>              buf, gtk.gdk.COLORSPACE_RGB,  True, 8, w, h, w*4)
> -        pixmap.draw_pixbuf(pixmap.new_gc(), pixbuf, 0, 0, 0, 0, w, h,
> +       g = pixmap.new_gc()
> +        pixmap.draw_pixbuf(g, pixbuf, 0, 0, 0, 0, w, h,
>                             gtk.gdk.RGB_DITHER_NONE, 0, 0)
> +
> +       print "XXXXXXXXXX", pixbuf,
> g,pixbuf.__grefcount__,g.__grefcount__
> +       print gc.get_referrers(pixbuf)
> +       print gc.get_referrers(g)
> +       del pixbuf
> +       del g
> +       gc.collect()
> +
>          if DEBUG: print 'FigureCanvasGTKAgg.render_figure done'
> 
>      def blit(self, bbox=None):
> 
> 
> The __grefcount__ values are 1 but the memory is not freed up even after
> gc.collect().
> 
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Matplotlib-devel mailing list
> Matplotlib-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel



-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to