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

Reply via email to