aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/session.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2010-07-30 17:31:28 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2010-07-30 17:31:28 -0400
commitd65a458b348cd458413b3cfec66e43ebd0367646 (patch)
tree984d730e5a81e4ae7c04b9f664d8a1cacdd0c6e6 /tools/perf/util/session.c
parent591765fdaf7ea1888157f342b67b0461f2e5ed9b (diff)
perf tools: Release session and symbol resources on exit
So that we reduce the noise when looking for leaks using tools such as valgrind. Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> LKML-Reference: <new-submission> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/session.c')
-rw-r--r--tools/perf/util/session.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 8cbea122e349..04a3b3db9e90 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -124,9 +124,35 @@ out_delete:
124 return NULL; 124 return NULL;
125} 125}
126 126
127static void perf_session__delete_dead_threads(struct perf_session *self)
128{
129 struct thread *n, *t;
130
131 list_for_each_entry_safe(t, n, &self->dead_threads, node) {
132 list_del(&t->node);
133 thread__delete(t);
134 }
135}
136
137static void perf_session__delete_threads(struct perf_session *self)
138{
139 struct rb_node *nd = rb_first(&self->threads);
140
141 while (nd) {
142 struct thread *t = rb_entry(nd, struct thread, rb_node);
143
144 rb_erase(&t->rb_node, &self->threads);
145 nd = rb_next(nd);
146 thread__delete(t);
147 }
148}
149
127void perf_session__delete(struct perf_session *self) 150void perf_session__delete(struct perf_session *self)
128{ 151{
129 perf_header__exit(&self->header); 152 perf_header__exit(&self->header);
153 perf_session__delete_dead_threads(self);
154 perf_session__delete_threads(self);
155 machine__exit(&self->host_machine);
130 close(self->fd); 156 close(self->fd);
131 free(self); 157 free(self);
132} 158}