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

Reply via email to