Graham Dumpleton wrote:
> On first look I would agree there is possibly a problem. There also
> would appear to be
> similar issues in other parts of mod_python. For example in
> cfgtree_walk() of util.c it has:
>
> PyObject *t = Py_BuildValue("(s, s)", dir->directive, dir->args);
> if (!t)
> return PyErr_NoMemory();
>
> PyList_Append(list, t);
>
> with "t" not being DECREF'd either.
>
> Also, in req_readlines() of requestobject.c, we have:
>
> line = req_readline(self, rlargs);
> while (line && (PyString_Size(line)>0)) {
> PyList_Append(result, line);
> size += PyString_Size(line);
> if ((sizehint != -1) && (size >= size))
> break;
> line = req_readline(self, args);
> }
>
> No DECREF for item added to list.
>
> I can't see any others in relation to dictionaries yet, but we probably
> need to do a good
> audit of all the code for such things as I have only check
> PyList_Append() and
> PyDict_SetItem() and not the other ways stuff can be added to such data
> structures.
>
> Anyway, still need to run some tests yet to confirm memory leak. :-)
I've been working through the PyList_Append instances and noticed the
cfgtree_walk and req_readlines issues as well. I've confirmed that
cfgtree_walk does indeed leak. I haven't tested req_readlines but I
can't see why it wouldn't leak.
Can you spot the other bug in req_readlines? Hint: (size >= size) will
always be true. ;) Once that is fixed I think we need to alter the docs
for req.readlines() as I'm not sure the description for sizehint
accurately reflects the way it works.
Jim
> Graham
>
> On 08/07/2006, at 1:05 AM, Harold Ship (JIRA) wrote:
>
>> [
>> http://issues.apache.org/jira/browse/MODPYTHON-172?page=comments#action_12419728
>> ]
>>
>> Harold Ship commented on MODPYTHON-172:
>> ---------------------------------------
>>
>> Please look at lines 202-205 of the same file, in parse_qs() :
>>
>> PyObject *list;
>> list = Py_BuildValue("[O]", val);
>> PyDict_SetItem(dict, key, list);
>> Py_DECREF(list);
>>
>>
>>
>>> Memory leak with util.fieldstorage using mod_python 3.2.8 on apache
>>> 2.0.55
>>> --------------------------------------------------------------------------
>>>
>>>
>>> Key: MODPYTHON-172
>>> URL: http://issues.apache.org/jira/browse/MODPYTHON-172
>>> Project: mod_python
>>> Type: Bug
>>
>>> Components: core
>>> Versions: 3.2.8
>>> Environment: Win32 XP SP1 / SP2
>>> Apache 2.0.55 installed from binary (.MSI)
>>> Python 2.4.2 or 2.4.3 installed from binary from www.python.org
>>> Reporter: Laurent Blanquet
>>
>>>
>>> I encounter memory leaks [~ 16 K per request) using the configuration
>>> described below.
>>> =============================
>>> Python configuration from Httpd.conf:
>>> =============================
>>> Alias /python/ "d:/python24/B2B/"
>>> <Directory "d:/python24/B2B">
>>> AddHandler mod_python .py
>>> PythonHandler pyHandlerHTTP
>>> PythonDebug On
>>> </Directory>
>>> =============================
>>> Test handler - pyHandlerHTTP.py :
>>> =============================
>>> import mod_python
>>> from mod_python import util
>>> def handler(req):
>>> #Removing this line solves the problem.
>>> F=util.FieldStorage( req )
>>> return mod_python.apache.OK
>>> =============================
>>> HTTP Request (dump using TCPWATCH):
>>> =============================
>>> POST http://localhost:80/python/Alertes.py HTTP/1.0
>>> Content-Type: multipart/form-data; boundary=--------061006144341906
>>> Content-Length: 209
>>> Proxy-Connection: keep-alive
>>> Host: www.tx2-localhost
>>> Accept: text/html, */*
>>> User-Agent: Mozilla/3.0 (compatible; Indy Library)
>>> Proxy-Authorization: Basic Og==
>>>
>>> ----------061006144341906
>>> Content-Disposition: form-data; name="TYPE"
>>>
>>> LAST_ALERTS
>>> ----------061006144341906
>>> Content-Disposition: form-data; name="FILEAGE"
>>>
>>> 180
>>>
>>> ----------061006144341906
>>
>> --This message is automatically generated by JIRA.
>> -
>> If you think it was sent incorrectly contact one of the administrators:
>> http://issues.apache.org/jira/secure/Administrators.jspa
>> -
>> For more information on JIRA, see:
>> http://www.atlassian.com/software/jira
>
>