Agreed. I'm not sure how this bug could be resolved only on the
matplotlib side. See if you can make a standalone (pygtk-only) example
that demonstrates this bug and send it to their mailing list. Also, if
it's possible, try updating pygtk. There was a very similar bug in an
earlier version (sorry, I can't find the reference), that was resolved.
Cheers,
Mike
Eric Firing wrote:
> 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.0 +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.0 +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 "XX", 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
>
--
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA
-
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