diff options
Diffstat (limited to 'tools/perf/util/map.c')
-rw-r--r-- | tools/perf/util/map.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c index 2ddbae319de5..15d6a6dd50c5 100644 --- a/tools/perf/util/map.c +++ b/tools/perf/util/map.c | |||
@@ -539,6 +539,32 @@ int machine__init(struct machine *self, const char *root_dir, pid_t pid) | |||
539 | return self->root_dir == NULL ? -ENOMEM : 0; | 539 | return self->root_dir == NULL ? -ENOMEM : 0; |
540 | } | 540 | } |
541 | 541 | ||
542 | static void dsos__delete(struct list_head *self) | ||
543 | { | ||
544 | struct dso *pos, *n; | ||
545 | |||
546 | list_for_each_entry_safe(pos, n, self, node) { | ||
547 | list_del(&pos->node); | ||
548 | dso__delete(pos); | ||
549 | } | ||
550 | } | ||
551 | |||
552 | void machine__exit(struct machine *self) | ||
553 | { | ||
554 | struct kmap *kmap = map__kmap(self->vmlinux_maps[MAP__FUNCTION]); | ||
555 | |||
556 | if (kmap->ref_reloc_sym) { | ||
557 | free((char *)kmap->ref_reloc_sym->name); | ||
558 | free(kmap->ref_reloc_sym); | ||
559 | } | ||
560 | |||
561 | map_groups__exit(&self->kmaps); | ||
562 | dsos__delete(&self->user_dsos); | ||
563 | dsos__delete(&self->kernel_dsos); | ||
564 | free(self->root_dir); | ||
565 | self->root_dir = NULL; | ||
566 | } | ||
567 | |||
542 | struct machine *machines__add(struct rb_root *self, pid_t pid, | 568 | struct machine *machines__add(struct rb_root *self, pid_t pid, |
543 | const char *root_dir) | 569 | const char *root_dir) |
544 | { | 570 | { |