memory leak in reportlab xmllib.FastXMLParser

Mirko Dziadzka <[email protected]>
Newsgroups gmane.comp.python.reportlab.user
Message-ID <[email protected]>
Hi

I’m not sure if this is the right list for a bug report, any pointers to another address are welcome.

Problem description
===============

The following program creates a memory leak. 

As a result, using reportlab.platypus.paraparser.ParaParser creates a memory leak too.
As a result, wordaxe has a memory leak (my original problem)


# show memory leak
import  gc
from reportlab.lib import  xmllib

assert xmllib.sgmlop # check that we are using FastXMLParser

while True:
   parser = xmllib.XMLParser(verbose=0)
   parser.close()
   gc.collect()


How to reproduce
==============

Just start this program and watch the memory going up … see the 6th column in the ps output below

$ while sleep 10 ; do ps auxww | grep python | grep -v grep ; done
mirko            1023 100,0  0,3  2467680  25608 s000  R+    5:10pm   1:00.44 python t.py
mirko            1023 100,0  0,3  2469728  27424 s000  R+    5:10pm   1:10.47 python t.py
mirko            1023  99,3  0,3  2471520  29048 s000  R+    5:10pm   1:20.50 python t.py
mirko            1023 100,0  0,4  2472288  30616 s000  R+    5:10pm   1:30.54 python t.py


I tested this with reportlab-2.5 and reportlab-2.7 on CentOS-6-64bit and MacOS 10.8 with Python 2.7 and Python 2.6

Analysis
=======

It seems that there is a cyclic reference between FastXMLParser and sgmlop and parser.close() is not cleaning up.

Using the SlowXMLParser instead of XMLParser is working fine.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.