From: Wang Nan [mailto:[email protected]] > >When failure occures in add_probe_trace_event(), to avoid potential >dangling pointer and memory leak, resource attached to 'struct >probe_trace_event' should be cleared.
Oops, right. I've found actual memory leak and this fix is not enough, because debuginfo__find_trace_events() releases "tevs" array without clearing everything in the array if it fails... Since add_probe_trace_event() may be invoked repeatedly while searching probe points from debuginfo, there can be the case that first N-1 times succeeds, but Nth call fails. In that case, even if you clear the last one, we still have N-1 tevs and debuginfo__find_trace_events() leaks those. Thus, the correct fix is clearing all the tevs when we hit any error. I'll send other patch to fix it. Thanks! > >Signed-off-by: Wang Nan <[email protected]> >Cc: Masami Hiramatsu <[email protected]> >Cc: Arnaldo Carvalho de Melo <[email protected]> >Cc: Zefan Li <[email protected]> >Cc: [email protected] >--- > tools/perf/util/probe-finder.c | 2 ++ > 1 file changed, 2 insertions(+) > >diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c >index bd8f03d..e9e37ca 100644 >--- a/tools/perf/util/probe-finder.c >+++ b/tools/perf/util/probe-finder.c >@@ -1235,6 +1235,8 @@ static int add_probe_trace_event(Dwarf_Die *sc_die, >struct probe_finder *pf) > > end: > free(args); >+ if (ret) >+ clear_probe_trace_event(tev); > return ret; > } > >-- >1.8.3.4

