[Numpy-discussion] PATCH: arange leaks references to provided dtype

Travis Oliphant teoliphant at gmail.com
Wed Jun 30 18:52:49 EDT 2010


On Jun 30, 2010, at 3:18 PM, Lisandro Dalcin wrote:

> Sorry, no time to make a proper bug report in the tracker.
> 
> This bug have been annoying me from about 3 years, today I finally
> discovered the actual issue!!.

Thanks so much.    This is an excellent fix.    

-Travis





> 
> The code below shows that arange leaks references to dtype (actually,
> PyArray_Descr instances).
> 
> import sys
> import numpy as np
> 
> t = np.dtype('d')
> while 1:
>    a = np.arange(1,dtype=t)
>    print (sys.getrefcount(t))
> 
> 
> I see this in numpy 1.3.0 on py2.6 (Fedora 12). This is also present
> in numpy svn/trunk on py2.7 and 3.1
> 
> 
> The trivial patch below seems to fix this refcount bug:
> 
> Index: numpy/core/src/multiarray/multiarraymodule.c
> ===================================================================
> --- numpy/core/src/multiarray/multiarraymodule.c	(revision 8467)
> +++ numpy/core/src/multiarray/multiarraymodule.c	(working copy)
> @@ -1863,7 +1863,7 @@
> 
> static PyObject *
> array_arange(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *kws) {
> -    PyObject *o_start = NULL, *o_stop = NULL, *o_step = NULL;
> +    PyObject *o_start = NULL, *o_stop = NULL, *o_step = NULL, *range;
>     static char *kwd[]= {"start", "stop", "step", "dtype", NULL};
>     PyArray_Descr *typecode = NULL;
> 
> @@ -1873,7 +1873,9 @@
>         Py_XDECREF(typecode);
>         return NULL;
>     }
> -    return PyArray_ArangeObj(o_start, o_stop, o_step, typecode);
> +    range = PyArray_ArangeObj(o_start, o_stop, o_step, typecode);
> +    Py_XDECREF(typecode);
> +    return range;
> }
> 
> /*NUMPY_API
> 
> 
> 
> 
> -- 
> Lisandro Dalcin
> ---------------
> CIMEC (INTEC/CONICET-UNL)
> Predio CONICET-Santa Fe
> Colectora RN 168 Km 472, Paraje El Pozo
> Tel: +54-342-4511594 (ext 1011)
> Tel/Fax: +54-342-4511169
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion

---
Travis Oliphant
Enthought, Inc.
oliphant at enthought.com
1-512-536-1057
http://www.enthought.com






More information about the NumPy-Discussion mailing list