tools/perf/builtin-trace.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
I've found some leaks from 'perf trace -a'. It seems there are more
leaks but this is what I can find for now.
Cc: Howard Chu <howardchu95@gmail.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/builtin-trace.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 3d0c0076884d34cb..10cd99888a9a11b5 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -2835,7 +2835,7 @@ static int trace__fprintf_sys_enter(struct trace *trace, struct evsel *evsel,
e_machine = thread__e_machine(thread, trace->host);
sc = trace__syscall_info(trace, evsel, e_machine, id);
if (sc == NULL)
- return -1;
+ goto out_put;
ttrace = thread__trace(thread, trace);
/*
* We need to get ttrace just to make sure it is there when syscall__scnprintf_args()
@@ -4123,8 +4123,10 @@ static int trace__set_filter_loop_pids(struct trace *trace)
pids[nr++] = thread__tid(parent);
break;
}
+ thread__put(thread);
thread = parent;
}
+ thread__put(thread);
err = evlist__append_tp_filter_pids(trace->evlist, nr, pids);
if (!err && trace->filter_pids.map)
--
2.49.0.472.ge94155a9ec-goog
Hello Namhyung, On Mon, Mar 31, 2025 at 11:46 AM Namhyung Kim <namhyung@kernel.org> wrote: > > I've found some leaks from 'perf trace -a'. It seems there are more > leaks but this is what I can find for now. > > Cc: Howard Chu <howardchu95@gmail.com> > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > --- > tools/perf/builtin-trace.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c > index 3d0c0076884d34cb..10cd99888a9a11b5 100644 > --- a/tools/perf/builtin-trace.c > +++ b/tools/perf/builtin-trace.c > @@ -2835,7 +2835,7 @@ static int trace__fprintf_sys_enter(struct trace *trace, struct evsel *evsel, > e_machine = thread__e_machine(thread, trace->host); > sc = trace__syscall_info(trace, evsel, e_machine, id); > if (sc == NULL) > - return -1; > + goto out_put; > ttrace = thread__trace(thread, trace); > /* > * We need to get ttrace just to make sure it is there when syscall__scnprintf_args() > @@ -4123,8 +4123,10 @@ static int trace__set_filter_loop_pids(struct trace *trace) > pids[nr++] = thread__tid(parent); I suggest adding a: thread_put(parent); here, just before the break. > break; > } > + thread__put(thread); > thread = parent; > } > + thread__put(thread); > > err = evlist__append_tp_filter_pids(trace->evlist, nr, pids); > if (!err && trace->filter_pids.map) > -- > 2.49.0.472.ge94155a9ec-goog > Thanks, Howard
Hello Howard, On Tue, Apr 01, 2025 at 06:07:15PM -0700, Howard Chu wrote: > Hello Namhyung, > > On Mon, Mar 31, 2025 at 11:46 AM Namhyung Kim <namhyung@kernel.org> wrote: > > > > I've found some leaks from 'perf trace -a'. It seems there are more > > leaks but this is what I can find for now. > > > > Cc: Howard Chu <howardchu95@gmail.com> > > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > > --- > > tools/perf/builtin-trace.c | 4 +++- > > 1 file changed, 3 insertions(+), 1 deletion(-) > > > > diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c > > index 3d0c0076884d34cb..10cd99888a9a11b5 100644 > > --- a/tools/perf/builtin-trace.c > > +++ b/tools/perf/builtin-trace.c > > @@ -2835,7 +2835,7 @@ static int trace__fprintf_sys_enter(struct trace *trace, struct evsel *evsel, > > e_machine = thread__e_machine(thread, trace->host); > > sc = trace__syscall_info(trace, evsel, e_machine, id); > > if (sc == NULL) > > - return -1; > > + goto out_put; > > ttrace = thread__trace(thread, trace); > > /* > > * We need to get ttrace just to make sure it is there when syscall__scnprintf_args() > > @@ -4123,8 +4123,10 @@ static int trace__set_filter_loop_pids(struct trace *trace) > > pids[nr++] = thread__tid(parent); > > I suggest adding a: > thread_put(parent); > here, just before the break. You're right, will add it. Thanks, Namhyung > > > break; > > } > > + thread__put(thread); > > thread = parent; > > } > > + thread__put(thread); > > > > err = evlist__append_tp_filter_pids(trace->evlist, nr, pids); > > if (!err && trace->filter_pids.map) > > -- > > 2.49.0.472.ge94155a9ec-goog > > > > Thanks, > Howard
On Mon, Mar 31, 2025 at 11:46 AM Namhyung Kim <namhyung@kernel.org> wrote: > > I've found some leaks from 'perf trace -a'. It seems there are more > leaks but this is what I can find for now. > > Cc: Howard Chu <howardchu95@gmail.com> > Signed-off-by: Namhyung Kim <namhyung@kernel.org> Tested-by: Ian Rogers <irogers@google.com> Thanks, Ian > --- > tools/perf/builtin-trace.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c > index 3d0c0076884d34cb..10cd99888a9a11b5 100644 > --- a/tools/perf/builtin-trace.c > +++ b/tools/perf/builtin-trace.c > @@ -2835,7 +2835,7 @@ static int trace__fprintf_sys_enter(struct trace *trace, struct evsel *evsel, > e_machine = thread__e_machine(thread, trace->host); > sc = trace__syscall_info(trace, evsel, e_machine, id); > if (sc == NULL) > - return -1; > + goto out_put; > ttrace = thread__trace(thread, trace); > /* > * We need to get ttrace just to make sure it is there when syscall__scnprintf_args() > @@ -4123,8 +4123,10 @@ static int trace__set_filter_loop_pids(struct trace *trace) > pids[nr++] = thread__tid(parent); > break; > } > + thread__put(thread); > thread = parent; > } > + thread__put(thread); > > err = evlist__append_tp_filter_pids(trace->evlist, nr, pids); > if (!err && trace->filter_pids.map) > -- > 2.49.0.472.ge94155a9ec-goog >
© 2016 - 2025 Red Hat, Inc.