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

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