On Fri, Apr 17, 2009 at 9:25 AM, Dan S
<dan.s.towell+nu...@gmail.com<dan.s.towell%2bnu...@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);

           ^^^^^^^^^^^^^^^^^^^
Not needed.

>
>        Py_DECREF(array); // destroy the contig array
>        Py_DECREF(input); // is this needed?

           ^^^^^^^^^^^^^^^^^^^^

Shouldn't be, but there might be a bug somewhere which causes the reference
count of input to be double incremented. Does the reference count in the
test script increase without this line? Do array and input point to the same
object?

Chuck
_______________________________________________
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to