This code in req.readlines() looks a bit fishy to me and possibly leaks memory. The code in question is:
rlargs = PyTuple_New(0); if (result == NULL) return PyErr_NoMemory(); line = req_readline(self, rlargs); while (line && ((linesize=PyString_Size(line))>0)) { PyList_Append(result, line); size += linesize; if ((sizehint != -1) && (size >= sizehint)) break; Py_DECREF(line); line = req_readline(self, args); } Py_XDECREF(line); The thing that looks wrong is 'rlargs'. This is created, used in a sub call to req_readline() but then never destroyed. Thus, possibly a memory leak. Next thing is that on the first read of a line, ie., call to req_readline(), there will be no limit on size, as rlargs (empty tuple) is used. On subsequent calls to req_readline() it passed the args from the caller instead of rlargs. Depending on how req_readline() is implemented, this may not work how want might think it might. Will need to investigate further. Graham