binutils-gdb/gdb/python
Philippe Waroquiers 2e953acac2 Fix a bunch of python leaks due to missing calls to tp_free in *_dealloc functions.
valgrind reports leaks in many python tests, such as:
==17162== VALGRIND_GDB_ERROR_BEGIN
==17162== 8,208 (5,472 direct, 2,736 indirect) bytes in 57 blocks are definitely lost in loss record 7,551 of 7,679
==17162==    at 0x4835753: malloc (vg_replace_malloc.c:307)
==17162==    by 0x6EAFD1: _PyObject_New (object.c:279)
==17162==    by 0x4720E6: blpy_iter(_object*) (py-block.c:92)
==17162==    by 0x698772: PyObject_GetIter (abstract.c:2577)
==17162==    by 0x2343BE: _PyEval_EvalFrameDefault (ceval.c:3159)
==17162==    by 0x22E9E2: function_code_fastcall (call.c:283)
==17162==    by 0x2340A8: _PyObject_Vectorcall (abstract.h:127)
==17162==    by 0x2340A8: call_function (ceval.c:4987)
==17162==    by 0x2340A8: _PyEval_EvalFrameDefault (ceval.c:3486)
==17162==    by 0x22E9E2: function_code_fastcall (call.c:283)
==17162==    by 0x82172B: _PyObject_Vectorcall (abstract.h:127)
==17162==    by 0x82172B: method_vectorcall (classobject.c:67)
==17162==    by 0x6AF474: _PyObject_Vectorcall (abstract.h:127)
==17162==    by 0x6AF474: _PyObject_CallNoArg (abstract.h:153)
==17162==    by 0x6AF474: _PyObject_CallFunctionVa (call.c:914)
==17162==    by 0x6B0673: callmethod (call.c:1010)
==17162==    by 0x6B0673: _PyObject_CallMethod_SizeT (call.c:1103)
==17162==    by 0x477DFE: gdb_PyObject_CallMethod<> (python-internal.h:182)
==17162==    by 0x477DFE: get_py_iter_from_func(_object*, char const*) (py-framefilter.c:272)
==17162==    by 0x4791B4: py_print_args (py-framefilter.c:706)
==17162==    by 0x4791B4: py_print_frame(_object*, enum_flags<frame_filter_flag>, ext_lang_frame_args, ui_out*, int, htab*) (py-framefilter.c:960)
==17162==    by 0x47A130: gdbpy_apply_frame_filter(extension_language_defn const*, frame_info*, enum_flags<frame_filter_flag>, ext_lang_frame_args, ui_out*, int, int) (py-framefilter.c:1236)
==17162==    by 0x369C39: apply_ext_lang_frame_filter(frame_info*, enum_flags<frame_filter_flag>, ext_lang_frame_args, ui_out*, int, int) (extension.c:563)
==17162==    by 0x4EC9C9: backtrace_command_1 (stack.c:2031)
==17162==    by 0x4EC9C9: backtrace_command(char const*, int) (stack.c:2183)
...

Most of the leaks in python tests are due to the fact that many
PyObject xxxxx_dealloc functions are missing the line to free self
or obj such as:
   Py_TYPE (self)->tp_free (self);
or
   Py_TYPE (obj)->tp_free (obj);

With this patch, the number of python tests leaking decreases from 52 to 12.

gdb/ChangeLog

2019-11-18  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* python/py-block.c (blpy_dealloc): Call tp_free.
	(blpy_block_syms_dealloc): Likewise.
	* python/py-finishbreakpoint.c (bpfinishpy_dealloc): Likewise.
	* python/py-inferior.c (infpy_dealloc): Likewise.
	* python/py-lazy-string.c (stpy_dealloc): Likewise.
	* python/py-linetable.c (ltpy_iterator_dealloc): Likewise.
	* python/py-symbol.c (sympy_dealloc): Likewise.
	* python/py-symtab.c (stpy_dealloc): Likewise.
	* python/py-type.c (typy_iterator_dealloc): Likewise.
2019-11-18 20:14:26 +01:00
..
lib/gdb
py-all-events.def
py-arch.c
py-auto-load.c
py-block.c Fix a bunch of python leaks due to missing calls to tp_free in *_dealloc functions. 2019-11-18 20:14:26 +01:00
py-bpevent.c
py-breakpoint.c Fix python gdbpy_breakpoint_object leak. 2019-11-14 02:25:39 +01:00
py-cmd.c
py-continueevent.c
py-event-types.def
py-event.c
py-event.h
py-events.h
py-evtregistry.c
py-evts.c
py-exitedevent.c
py-finishbreakpoint.c Fix a bunch of python leaks due to missing calls to tp_free in *_dealloc functions. 2019-11-18 20:14:26 +01:00
py-frame.c
py-framefilter.c
py-function.c
py-gdb-readline.c Constify command_line_input 2019-11-08 06:59:36 -07:00
py-inferior.c Fix a bunch of python leaks due to missing calls to tp_free in *_dealloc functions. 2019-11-18 20:14:26 +01:00
py-infevents.c
py-infthread.c
py-instruction.c
py-instruction.h
py-lazy-string.c Fix a bunch of python leaks due to missing calls to tp_free in *_dealloc functions. 2019-11-18 20:14:26 +01:00
py-linetable.c Fix a bunch of python leaks due to missing calls to tp_free in *_dealloc functions. 2019-11-18 20:14:26 +01:00
py-newobjfileevent.c
py-objfile.c
py-param.c
py-prettyprint.c
py-progspace.c
py-record-btrace.c
py-record-btrace.h
py-record-full.c
py-record-full.h
py-record.c
py-record.h
py-ref.h
py-signalevent.c
py-stopevent.c
py-stopevent.h
py-symbol.c Fix a bunch of python leaks due to missing calls to tp_free in *_dealloc functions. 2019-11-18 20:14:26 +01:00
py-symtab.c Fix a bunch of python leaks due to missing calls to tp_free in *_dealloc functions. 2019-11-18 20:14:26 +01:00
py-threadevent.c
py-type.c Fix a bunch of python leaks due to missing calls to tp_free in *_dealloc functions. 2019-11-18 20:14:26 +01:00
py-unwind.c
py-utils.c
py-value.c
py-varobj.c
py-xmethods.c
python-config.py
python-internal.h gdb/python: Introduce gdb.lookup_static_symbols 2019-11-10 21:35:32 +00:00
python.c gdb/python: Introduce gdb.lookup_static_symbols 2019-11-10 21:35:32 +00:00
python.h