Memory leaks with set_property when using introspection marshalling path
Submitted by Simon Feltman
Link to original bug (#735018)
Description
These are most likely caused by the marshalling path not cleaning up by pairing _pygi_argument_release() with the call to _pygi_argument_from_object(). We should probably also not use transfer annotations when marshalling for set_property() it can be assumed to always be transfer-none.
https://git.gnome.org/browse/pygobject/tree/gi/pygi-property.c?id=3.13.4#n274
% make check.valgrind TEST_NAMES=test_properties
==16458== 58 (24 direct, 34 indirect) bytes in 1 blocks are definitely lost in loss record 1,226 of 5,141 ==16458== at 0x4C2745D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==16458== by 0xF9EADE6: g_malloc (gmem.c:97) ==16458== by 0xFA03A22: g_slice_alloc (gslice.c:1007) ==16458== by 0xF9DEAF2: g_list_prepend (glist.c:308) ==16458== by 0xEB043E5: _pygi_argument_from_object (pygi-argument.c:1134) ==16458== by 0xEB09020: pygi_set_property_value (pygi-property.c:233) ==16458== by 0xEAE8FC6: PyGProps_setattro (pygobject.c:373) ==16458== by 0x4ED31BE: PyObject_SetAttr (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F3BBB8: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40869: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F42174: PyEval_EvalCodeEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40573: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== ==16458== 58 (24 direct, 34 indirect) bytes in 1 blocks are definitely lost in loss record 1,227 of 5,141 ==16458== at 0x4C2745D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==16458== by 0xF9EADE6: g_malloc (gmem.c:97) ==16458== by 0xFA03A22: g_slice_alloc (gslice.c:1007) ==16458== by 0xF9DEAF2: g_list_prepend (glist.c:308) ==16458== by 0xEB043E5: _pygi_argument_from_object (pygi-argument.c:1134) ==16458== by 0xEB09020: pygi_set_property_value (pygi-property.c:233) ==16458== by 0xEAEAEA2: pygobject_set_property (pygobject.c:1370) ==16458== by 0x4F40B06: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40869: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F42174: PyEval_EvalCodeEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40573: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F42174: PyEval_EvalCodeEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== ==16458== 144 bytes in 2 blocks are definitely lost in loss record 3,542 of 5,141 ==16458== at 0x4C2745D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==16458== by 0xF9EADE6: g_malloc (gmem.c:97) ==16458== by 0xFA03A22: g_slice_alloc (gslice.c:1007) ==16458== by 0xEF3D30D: _g_info_new_full (gibaseinfo.c:63) ==16458== by 0xEF4551B: g_irepository_find_by_name (girepository.c:784) ==16458== by 0xEF3D573: _g_info_from_entry (gibaseinfo.c:135) ==16458== by 0xEF47CEA: g_type_info_get_interface (gitypeinfo.c:208) ==16458== by 0xEB05D29: _pygi_argument_release (pygi-argument.c:1669) ==16458== by 0xEB0978E: pygi_set_property_value (pygi-property.c:376) ==16458== by 0xEAEAEA2: pygobject_set_property (pygobject.c:1370) ==16458== by 0x4F40B06: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40869: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== ==16458== 144 bytes in 2 blocks are definitely lost in loss record 3,543 of 5,141 ==16458== at 0x4C2745D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==16458== by 0xF9EADE6: g_malloc (gmem.c:97) ==16458== by 0xFA03A22: g_slice_alloc (gslice.c:1007) ==16458== by 0xEF3D30D: _g_info_new_full (gibaseinfo.c:63) ==16458== by 0xEF4551B: g_irepository_find_by_name (girepository.c:784) ==16458== by 0xEF3D573: _g_info_from_entry (gibaseinfo.c:135) ==16458== by 0xEF47CEA: g_type_info_get_interface (gitypeinfo.c:208) ==16458== by 0xEB05D29: _pygi_argument_release (pygi-argument.c:1669) ==16458== by 0xEB0978E: pygi_set_property_value (pygi-property.c:376) ==16458== by 0xEAE8FC6: PyGProps_setattro (pygobject.c:373) ==16458== by 0x4ED31BE: PyObject_SetAttr (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F34CF9: ??? (in /usr/lib64/libpython3.3m.so.1.0) ==16458== ==16458== 208 (72 direct, 136 indirect) bytes in 3 blocks are definitely lost in loss record 3,705 of 5,141 ==16458== at 0x4C2745D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==16458== by 0xF9EADE6: g_malloc (gmem.c:97) ==16458== by 0xFA03A22: g_slice_alloc (gslice.c:1007) ==16458== by 0xF9DEAF2: g_list_prepend (glist.c:308) ==16458== by 0xEB043E5: _pygi_argument_from_object (pygi-argument.c:1134) ==16458== by 0xEB09020: pygi_set_property_value (pygi-property.c:233) ==16458== by 0xEAEAEA2: pygobject_set_property (pygobject.c:1370) ==16458== by 0x4F40B06: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40869: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40869: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F42174: PyEval_EvalCodeEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40573: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== ==16458== 208 (72 direct, 136 indirect) bytes in 3 blocks are definitely lost in loss record 3,706 of 5,141 ==16458== at 0x4C2745D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==16458== by 0xF9EADE6: g_malloc (gmem.c:97) ==16458== by 0xFA03A22: g_slice_alloc (gslice.c:1007) ==16458== by 0xF9DEAF2: g_list_prepend (glist.c:308) ==16458== by 0xEB043E5: _pygi_argument_from_object (pygi-argument.c:1134) ==16458== by 0xEB09020: pygi_set_property_value (pygi-property.c:233) ==16458== by 0xEAE8FC6: PyGProps_setattro (pygobject.c:373) ==16458== by 0x4ED31BE: PyObject_SetAttr (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F34CF9: ??? (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40B06: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40869: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40869: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== ==16458== 252 (88 direct, 164 indirect) bytes in 1 blocks are definitely lost in loss record 3,953 of 5,141 ==16458== at 0x4C2745D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==16458== by 0xF9EADE6: g_malloc (gmem.c:97) ==16458== by 0xFA03A22: g_slice_alloc (gslice.c:1007) ==16458== by 0xF9CEEEA: g_hash_table_new_full (ghash.c:656) ==16458== by 0xF9CEEC6: g_hash_table_new (ghash.c:626) ==16458== by 0xEB04770: _pygi_argument_from_object (pygi-argument.c:1212) ==16458== by 0xEB09020: pygi_set_property_value (pygi-property.c:233) ==16458== by 0xEAEAEA2: pygobject_set_property (pygobject.c:1370) ==16458== by 0x4F40B06: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40869: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40869: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F42174: PyEval_EvalCodeEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== ==16458== 252 (88 direct, 164 indirect) bytes in 1 blocks are definitely lost in loss record 3,954 of 5,141 ==16458== at 0x4C2745D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==16458== by 0xF9EADE6: g_malloc (gmem.c:97) ==16458== by 0xFA03A22: g_slice_alloc (gslice.c:1007) ==16458== by 0xF9CEEEA: g_hash_table_new_full (ghash.c:656) ==16458== by 0xF9CEEC6: g_hash_table_new (ghash.c:626) ==16458== by 0xEB04770: _pygi_argument_from_object (pygi-argument.c:1212) ==16458== by 0xEB09020: pygi_set_property_value (pygi-property.c:233) ==16458== by 0xEAE8FC6: PyGProps_setattro (pygobject.c:373) ==16458== by 0x4ED31BE: PyObject_SetAttr (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F34CF9: ??? (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40B06: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0) ==16458== by 0x4F40869: PyEval_EvalFrameEx (in /usr/lib64/libpython3.3m.so.1.0)