diff options
Diffstat (limited to 'tools/perf')
| -rw-r--r-- | tools/perf/util/map.c | 15 | 
1 files changed, 15 insertions, 0 deletions
| diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c index 64bea5eb8bf6..e32628cd20a7 100644 --- a/tools/perf/util/map.c +++ b/tools/perf/util/map.c @@ -577,10 +577,25 @@ static void __maps__purge(struct maps *maps)  	}  } +static void __maps__purge_names(struct maps *maps) +{ +	struct rb_root *root = &maps->names; +	struct rb_node *next = rb_first(root); + +	while (next) { +		struct map *pos = rb_entry(next, struct map, rb_node_name); + +		next = rb_next(&pos->rb_node_name); +		rb_erase_init(&pos->rb_node_name, root); +		map__put(pos); +	} +} +  static void maps__exit(struct maps *maps)  {  	down_write(&maps->lock);  	__maps__purge(maps); +	__maps__purge_names(maps);  	up_write(&maps->lock);  } |