diff --git a/tools/perf/util/maps.c b/tools/perf/util/maps.c index c305a864807a..6e8182bf5919 100644 --- a/tools/perf/util/maps.c +++ b/tools/perf/util/maps.c @@ -958,8 +958,13 @@ struct map *maps__find_next_entry(struct maps *maps, struct map *map) struct map *result = NULL; down_read(maps__lock(maps)); + while (!maps__maps_by_address_sorted(maps)) { + up_read(maps__lock(maps)); + maps__sort_by_address(maps); + down_read(maps__lock(maps)); + } i = maps__by_address_index(maps, map); - if (i < maps__nr_maps(maps)) + if (++i < maps__nr_maps(maps)) result = maps__maps_by_address(maps)[i]; // TODO: map__get up_read(maps__lock(maps));