Vlad Riscutia <riscutiav...@gmail.com> added the comment: I ran full test suit after making the _array_type = type(Array) change and everything passes.
I also took a look at this and found additional leak. gc shows this as garbage: [(<class '_ctypes._SimpleCData'>,), <class 'ctypes.c_longdouble'>, <attribute '_ _dict__' of 'c_longdouble' objects>, <attribute '__weakref__' of 'c_longdouble' objects>, (<class 'ctypes.c_longdouble'>, <class '_ctypes._SimpleCData'>, <class '_ctypes._CData'>, <class 'object'>), {'__dict__': <attribute '__dict__' of 'c_ longdouble' objects>, '_type_': 'g', '__module__': 'ctypes', '__weakref__': <att ribute '__weakref__' of 'c_longdouble' objects>, '__doc__': None}] This is all caused by these lines in ctypes __init__.py: class c_longdouble(_SimpleCData): _type_ = "g" if sizeof(c_longdouble) == sizeof(c_double): c_longdouble = c_double For me sizeof(c_longdouble) == sizeof(c_double) (I believe MS compiler always does this) but when we assign c_longdouble = c_double, there is a leak. I removed the alias lines: if sizeof(c_longdouble) == sizeof(c_double): c_longdouble = c_double And the leak was gone. Looks like changing c_longdouble after declaring it causes a leak. Below for similar aliasing of longlong types, we have this: if _calcsize("l") == _calcsize("q"): # if long and long long have the same size, make c_longlong an alias for c_long c_longlong = c_long c_ulonglong = c_ulong else: class c_longlong(_SimpleCData): _type_ = "q" _check_size(c_longlong) class c_ulonglong(_SimpleCData): _type_ = "Q" This avoids declaring c_longlong and c_ulonglong as class if not needed to. The problem is _calcsize("g") causes an error because "g" is used as long double througout ctypes but _calcsize is function from _struct.c, where "g" (long double) is not defined. Not sure why it isn't... So in short: As far as I can tell _array_type = type(Array) doesn't break anything Looks like we have another leak in ctypes (which isn't a big deal) We have elegant fix for the leak once _struct.c will support long double ---------- nosy: +vladris _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue12142> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com