binutils-gdb/gdb/python
Philippe Waroquiers bd454f8baf Fix python gdbpy_breakpoint_object leak.
valgrind reports a leak when a breakpoint is created then deleted:

==1313== 40 bytes in 1 blocks are definitely lost in loss record 1,115 of 8,596
==1313==    at 0x4835753: malloc (vg_replace_malloc.c:307)
==1313==    by 0x6E05BC: _PyObject_New (object.c:255)
==1313==    by 0x470E4B: gdbpy_breakpoint_created(breakpoint*) (py-breakpoint.c:1023)
==1313==    by 0x2946D9: operator() (std_function.h:687)
==1313==    by 0x2946D9: notify (observable.h:106)
==1313==    by 0x2946D9: install_breakpoint(int, std::unique_ptr<breakpoint, std::default_delete<breakpoint> >&&, int) (breakpoint.c:8136)
==1313==    by 0x295BCA: create_breakpoint_sal (breakpoint.c:8878)
==1313==    by 0x295BCA: create_breakpoints_sal (breakpoint.c:8919)
==1313==    by 0x295BCA: create_breakpoints_sal_default (breakpoint.c:13671)
...

The leak is due to a superfluous Py_INCREF when the python object
is allocated inside gdbpy_breakpoint_created, when the python object
is allocated locally: this object has already a refcount of 1, and
the only reference is the reference from the C breakpoint object.
The Py_INCREF is however needed when the python object was created from
python: the python object was stored in bppy_pending_object, and
gdbpy_breakpoint_created creates a new reference to this object.

Solve the leak by calling 'Py_INCREF (newbp);' only in the bppy_pending_object
case.

Regression tested on debian/amd64 natively and under valgrind on centos/amd64.
Before the patch, 795 tests have a definite leak.
After the patch, 197 have a definite leak.

Thanks to Tom, that helped on irc with the python refcount logic.

gdb/ChangeLog
2019-11-14  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* python/py-finishbreakpoint.c (gdbpy_breakpoint_created):
	only call Py_INCREF (newbp) in the bppy_pending_object case.
2019-11-14 02:25:39 +01:00
..
lib/gdb
py-all-events.def
py-arch.c
py-auto-load.c
py-block.c
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 [gdb] Fix more typos in comments (2) 2019-10-26 09:55:32 +02:00
py-evts.c
py-exitedevent.c
py-finishbreakpoint.c
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
py-infevents.c
py-infthread.c
py-instruction.c
py-instruction.h [gdb] Fix more typos in comments (2) 2019-10-26 09:55:32 +02:00
py-lazy-string.c
py-linetable.c
py-newobjfileevent.c
py-objfile.c
py-param.c
py-prettyprint.c
py-progspace.c gdb/python: Return None from Progspace.block_for_pc on error 2019-10-24 15:27:02 +01:00
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 gdb/python: Introduce gdb.lookup_static_symbols 2019-11-10 21:35:32 +00:00
py-symtab.c
py-threadevent.c
py-type.c
py-unwind.c
py-utils.c
py-value.c Remove la_get_string member 2019-11-05 15:36:28 -07:00
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