Skip to content

Commit 9afe565

Browse files
olsajiriacmel
authored andcommitted
perf tools: Release metric_events rblist
We don't release metric_events rblist, add the missing delete hook and call the release before leaving cmd_stat. Signed-off-by: Jiri Olsa <[email protected]> Acked-by: Ian Rogers <[email protected]> Cc: Alexander Shishkin <[email protected]> Cc: Andi Kleen <[email protected]> Cc: Michael Petlan <[email protected]> Cc: Namhyung Kim <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Stephane Eranian <[email protected]> Link: http://lore.kernel.org/lkml/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
1 parent 2cfaa85 commit 9afe565

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

tools/perf/builtin-stat.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2307,6 +2307,7 @@ int cmd_stat(int argc, const char **argv)
23072307

23082308
evlist__delete(evsel_list);
23092309

2310+
metricgroup__rblist_exit(&stat_config.metric_events);
23102311
runtime_stat_delete(&stat_config);
23112312

23122313
return status;

tools/perf/util/metricgroup.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,30 @@ static struct rb_node *metric_event_new(struct rblist *rblist __maybe_unused,
7676
return &me->nd;
7777
}
7878

79+
static void metric_event_delete(struct rblist *rblist __maybe_unused,
80+
struct rb_node *rb_node)
81+
{
82+
struct metric_event *me = container_of(rb_node, struct metric_event, nd);
83+
struct metric_expr *expr, *tmp;
84+
85+
list_for_each_entry_safe(expr, tmp, &me->head, nd) {
86+
free(expr);
87+
}
88+
89+
free(me);
90+
}
91+
7992
static void metricgroup__rblist_init(struct rblist *metric_events)
8093
{
8194
rblist__init(metric_events);
8295
metric_events->node_cmp = metric_event_cmp;
8396
metric_events->node_new = metric_event_new;
97+
metric_events->node_delete = metric_event_delete;
98+
}
99+
100+
void metricgroup__rblist_exit(struct rblist *metric_events)
101+
{
102+
rblist__exit(metric_events);
84103
}
85104

86105
struct egroup {

tools/perf/util/metricgroup.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,5 @@ void metricgroup__print(bool metrics, bool groups, char *filter,
4747
bool raw, bool details);
4848
bool metricgroup__has_metric(const char *metric);
4949
int arch_get_runtimeparam(void);
50+
void metricgroup__rblist_exit(struct rblist *metric_events);
5051
#endif

0 commit comments

Comments
 (0)