Thanks, I just committed a fix for it in mask.c.
Nirav On Wed, Sep 3, 2008 at 11:13 AM, Campbell Barton <[EMAIL PROTECTED]> wrote: > Hi, over a year ago I had a look at pygames py-c/api usage for memory > leaks, and found a few, mainly with Py_BuildValue() using PyObjects > which are incref'd, > had another look at the recent SVN and found some more, not sure if > they are new but they definitely cause memory leaks. > > For example - call pygame.mouse.get_cursor() in a loop of 10000 for > every update in chimp.py and memory will go up 100's of meg fairly > fast, patch below. > > you also might want to consider using PyTuple_Pack() which is faster > but only in python 2.4 or later. > http://docs.python.org/api/tupleObjects.html#l2h-583 > > > These leak too, much the same changes need to be made here also. > ./src/mask.c:265: return Py_BuildValue ("(OO)", > PyInt_FromLong(m10/m00), > ./src/mask.c:268: return Py_BuildValue ("(OO)", > PyInt_FromLong(0), PyInt_FromLong(0)); > ./src/mask.c:298: return Py_BuildValue ("O", > PyFloat_FromDouble(theta)); > ./src/mask.c:300: return Py_BuildValue ("O", PyFloat_FromDouble(0)); > > > Index: src/mouse.c > =================================================================== > --- src/mouse.c (revision 1645) > +++ src/mouse.c (working copy) > @@ -171,7 +171,7 @@ > mouse_get_cursor (PyObject* self) > { > SDL_Cursor *cursor = NULL; > - PyObject* xordata, *anddata; > + PyObject* xordata, *anddata, *ret; > int size, loop, w, h, spotx, spoty; > > VIDEO_INIT_CHECK (); > @@ -201,8 +201,10 @@ > PyTuple_SET_ITEM (xordata, loop, PyInt_FromLong (cursor->data[loop])); > PyTuple_SET_ITEM (anddata, loop, PyInt_FromLong (cursor->mask[loop])); > } > - > - return Py_BuildValue ("((ii)(ii)OO)", w, h, spotx, spoty, > xordata, anddata); > + ret = Py_BuildValue ("((ii)(ii)OO)", w, h, spotx, spoty, xordata, > anddata); > + Py_DECREF (xordata); > + Py_DECREF (anddata); > + return ret; > } > > static PyMethodDef mouse_builtins[] = >
