perf map: Fix map reference count issues

The find will get the map, ensure puts are done on all paths.

Signed-off-by: Ian Rogers <irogers@google.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20240229062048.558799-1-irogers@google.com
This commit is contained in:
Ian Rogers 2024-02-28 22:20:48 -08:00 committed by Namhyung Kim
parent 1947b92464
commit ec42d3d568
2 changed files with 8 additions and 10 deletions

View file

@ -611,14 +611,14 @@ struct symbol *maps__find_symbol(struct maps *maps, u64 addr, struct map **mapp)
struct symbol *result = NULL;
/* Ensure map is loaded before using map->map_ip */
if (map != NULL && map__load(map) >= 0) {
if (mapp)
*mapp = map;
if (map != NULL && map__load(map) >= 0)
result = map__find_symbol(map, map__map_ip(map, addr));
if (!mapp)
map__put(map);
}
if (mapp)
*mapp = map;
else
map__put(map);
return result;
}

View file

@ -2274,9 +2274,7 @@ static int find_perf_probe_point_from_map(struct probe_trace_point *tp,
ret = pp->function ? 0 : -ENOMEM;
out:
if (map && !is_kprobe) {
map__put(map);
}
map__put(map);
return ret;
}