[mod_python] Circular references starting from the request object are not collected

Gregory (Grisha) Trubetskoy grisha at modpython.org
Thu Sep 9 14:34:10 EDT 2004


Thanks for the cycle detection URL tip, I'll take a look at it.

A simple workaround would be to register a cleanup, something like:


def foobar_cleanup(req):
     req.foobar = None


Then in your handler, add a line:

     req.register_cleanup(foobar_cleanup, req)


Grisha

On Thu, 9 Sep 2004, Nicolas Lehuen wrote:

> Hi,
>
> I'm running Apache 2.0.50, mod_python 3.1.3 with Python 2.3.4 on Windows XP
> Pro and Windows 2000 server.
>
> I finally found a source for the memory leaks I have been observing for a
> while now : if you store an object in the request object that reference
> directly or indirectly the request object itself, it builds a circular
> reference. This circular reference does not seem to be garbage collected.
>
> The test handler :
>
> from mod_python import apache
>
> def handler(req):
>    # req.foobar=req
>    req.content_type='text/html'
>    req.write('OK')
>    return apache.OK
>
> I used Apache Benchmark :
>
> ab -c 5 -n 100000 http://localhost/test.py
>
> With the comment line, everything is OK, I do not see any memory leak.
>
> If I uncomment the 'req.reqs=[req]' line, the memory leak shows up. My
> Apache process normally uses around 20 MB without the comment, and in 30
> seconds of running the above handler (comment removed) with the above Apache
> Benchmark command, it reaches 125 MB !
>
> Normally, circular reference are collected by the garbage collector of
> Python, but unfortunately when defining object from C, you have to do a few
> tricks to support this :
>
> http://www.python.org/doc/2.3.4/api/supporting-cycle-detection.html
>
> It seems that this is not done in mod_python, by having a look at
> requestobject.c.
>
> I find this quite a big problem, and I don't find any workaround except
> "Don't reference the request object from anywhere that might be referenced
> by the request object", which is a pretty big limitation, quite annoying in
> the application I'm building.
>
> Best regards,
>
> Nicolas Lehuen
>
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python
>


More information about the Mod_python mailing list