[Numpy-discussion] Ticket review: #848, leak in PyArray_DescrFromType
Charles R Harris
charlesr.harris at gmail.com
Fri Jul 18 16:41:27 EDT 2008
On Fri, Jul 18, 2008 at 12:03 PM, Charles R Harris <
charlesr.harris at gmail.com> wrote:
<snip>
>
>
> Simpler test case:
>
> import sys, gc
> import numpy as np
>
> def main() :
> t = np.dtype(np.float32)
> print sys.getrefcount(t)
> for i in range(100) :
> np.float32()
> gc.collect()
> print sys.getrefcount(t)
>
> if __name__ == "__main__" :
> main()
>
> Result
>
> $[charris at f8 ~]$ python debug.py
> 5
> 105
>
> So there is a leak. The question is the proper fix. I want to take a closer
> look at PyArray_Return and also float32() and relations.
>
The reference leak seems specific to the float32 and complex64 types called
with default arguments.
In [1]: import sys, gc
In [2]: t = float32
In [3]: sys.getrefcount(dtype(t))
Out[3]: 4
In [4]: for i in range(10) : t();
...:
In [5]: sys.getrefcount(dtype(t))
Out[5]: 14
In [6]: for i in range(10) : t(0);
...:
In [7]: sys.getrefcount(dtype(t))
Out[7]: 14
In [8]: t = complex64
In [9]: sys.getrefcount(dtype(t))
Out[9]: 4
In [10]: for i in range(10) : t();
....:
In [11]: sys.getrefcount(dtype(t))
Out[11]: 14
In [12]: t = float64
In [13]: sys.getrefcount(dtype(t))
Out[13]: 19
In [14]: for i in range(10) : t();
....:
In [15]: sys.getrefcount(dtype(t))
Out[15]: 19
This shouldn't actually leak any memory as these types are singletons, but
it points up a logic flaw somewhere.
Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20080718/92aa594b/attachment.html>
More information about the NumPy-Discussion
mailing list