[Numpy-discussion] Solving a memory leak in a numpy extension; PyArray_ContiguousFromObject

Charles R Harris charlesr.harris at gmail.com
Fri Apr 17 21:44:28 EDT 2009


On Fri, Apr 17, 2009 at 7:37 PM, Charles R Harris <charlesr.harris at gmail.com
> wrote:

>
>
> On Fri, Apr 17, 2009 at 9:25 AM, Dan S <dan.s.towell+numpy at gmail.com<dan.s.towell%2Bnumpy at 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?
>

Oops, input in array are different types, so they won't point to the same
thing.

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20090417/add53dc4/attachment.html>


More information about the NumPy-Discussion mailing list