1) Calling both PyArray_XDECREF(array) and Py_DECREF(array) is likely wrong. 2) Py_DECREF(input) should never be done.
On Fri, Apr 17, 2009 at 12:25 PM, Dan S <dan.s.towell+nu...@gmail.com> wrote: > Hi - > > I have written a numpy extension which works fine but has a memory > leak. It takes a single array argument and returns a single scalar. > After reducing the code down in order to chase the problem, I have the > following: > > static PyObject * kdpee_pycall(PyObject *self, PyObject *args) > { > PyObject *input; > PyArrayObject *array; > int n, numdims; > > if (!PyArg_ParseTuple(args, "O", &input)) > return NULL; > > // Ensure we have contiguous, 2D, floating-point data: > array = (PyArrayObject*) PyArray_ContiguousFromObject(input, > PyArray_DOUBLE, 2, 2); > > if(array==NULL){ > printf("kdpee_py: nullness!\n"); > return NULL; > } > PyArray_XDECREF(array); > Py_DECREF(array); // destroy the contig array > Py_DECREF(input); // is this needed? doc says no, but it seems to fix > a reference-count-leak > return PyFloat_FromDouble(3.1415927); // temporary > } > > > The test code is > > from numpy import * > from kdpee import * > import sys > a = array( [[1,2,3,4,5,1,2,3,4,5], [6,7,8,9,0,6,7,8,9,0]]) > sys.getrefcount(a) > for i in range(5000): tmp = kdpee(a) > > sys.getrefcount(a) > > Every time I run this code I get "2" back from both calls to > sys.getrefcount(a), but I'm still getting a memory leak of about 0.4 > MB. What am I doing wrong? > > I'll be grateful for any suggestions you can offer. > > Thanks > Dan > > P.S. My system is python 2.5.4 (from macports) on intel Mac 10.4.11, > numpy provided by macports package "py25-numpy" v1.2.1 > _______________________________________________ > Numpy-discussion mailing list > Numpy-discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion > -- Lisandro Dalcín --------------- Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC) Instituto de Desarrollo Tecnológico para la Industria Química (INTEC) Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET) PTLC - Güemes 3450, (3000) Santa Fe, Argentina Tel/Fax: +54-(0)342-451.1594 _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion