[Numpy-discussion] Memory leak in ndarray, more info
Karol Langner
karol.langner@kn...
Sun Oct 28 19:28:53 CDT 2007
On Friday 26 October 2007 05:39, Robert Crida wrote:
> I recently posted about a memory leak in numpy and failed to mention the
> version. The leak manifests itself in numpy-1.0.3.1 but is not present in
> numpy-1.0.2
>
> The following code reproduces the bug:
>
> import numpy as np
>
> a = np.array([1.0, 2.0, 3.0])
> while True:
> b = str(a)
>
> What happens above is that is repeatedly converted to a string. The process
> size grow quite rapidly.
>
> Has anyone else come across this? Where do I look to try to correct it?
Debugging exposes numpy.core.umath.seterrobj as the source, so you can get
even faster memory growth with this (around 30MB/s on my machine):
import numpy
pyvals = numpy.core.umath.geterrobj()
while True:
numpy.core.umath.seterrobj(pyvals)
That is actually ufunc_seterr in trunk/numpy/core/src/ufuncobject.c... which
calls ufunc_update_use_defaults as of r3040. A call to Py_DECREF(errobj) is
missing there after calling PyUFunc_GetPyValues.
So using the following patch on the current svn revision of ufuncobject.c
should fix this leak:
3206a3207
> Py_DECREF(errobj);
Cheers,
Karol
--
written by Karol Langner
Sun Oct 28 20:00:47 EDT 2007
More information about the Numpy-discussion
mailing list