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.
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