[New-bugs-announce] [issue33267] ctypes array types create reference cycles
Eric Wieser
report at bugs.python.org
Thu Apr 12 04:45:09 EDT 2018
New submission from Eric Wieser <wieser.eric+pybug at gmail.com>:
Discovered in https://github.com/numpy/numpy/pull/10882/files#r180813166
A reproduction:
```
In [1]: import ctypes
In [2]: def make_array_ctype(shape):
...: import ctypes
...: ct = ctypes.c_uint8
...: for i in shape:
...: ct = i * ct
...: return ct
...:
# all on one line to keep ipython out of this
In [3]: gc.collect(); x = make_array_ctype((1,)); del x; gc.collect()
```
Using the proposed function in https://github.com/numpy/numpy/pull/10891, we get a few more details:
```
In [4]: from numpy.testing import assert_no_gc_cycles
In [5]: assert_no_gc_cycles(make_array_ctype, (1,))
AssertionError: Reference cycles were found when calling make_array_ctype: 7 objects were collected, of which 6 are shown below:
tuple object with id=2822255556536:
(<class '_ctypes.Array'>,)
PyCArrayType object with id=2822226500408:
<class '__main__.c_ubyte_Array_1'>
getset_descriptor object with id=2822252062256:
<attribute '__dict__' of 'c_ubyte_Array_1' objects>
getset_descriptor object with id=2822252062184:
<attribute '__weakref__' of 'c_ubyte_Array_1' objects>
tuple object with id=2822243712440:
(<class '__main__.c_ubyte_Array_1'>,
<class '_ctypes.Array'>,
<class '_ctypes._CData'>,
<class 'object'>)
StgDict object with id=2822226211928:
{'__dict__': <attribute '__dict__' of 'c_ubyte_Array_1' objects>,
'__doc__': None,
'__module__': '__main__',
'__weakref__': <attribute '__weakref__' of 'c_ubyte_Array_1' objects>,
'_length_': 1,
'_type_': <class 'ctypes.c_ubyte'>}
```
I suppose this isn't really a bug, but it's not clear to me why a cycle needs to be created here.
----------
components: ctypes
messages: 315216
nosy: Eric.Wieser
priority: normal
severity: normal
status: open
title: ctypes array types create reference cycles
versions: Python 3.5
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue33267>
_______________________________________
More information about the New-bugs-announce
mailing list