Skip to content

Commit

Permalink
perf report: Use map_symbol__copy() when copying callchains
Browse files Browse the repository at this point in the history
It seems there are places to miss updating refcount of maps.
Let's use map_symbol__copy() helper to properly copy them with
refcounts updated.

Link: https://lore.kernel.org/r/20250307061250.320849-1-namhyung@kernel.org
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
  • Loading branch information
Namhyung Kim committed Mar 7, 2025
1 parent 4c3f09e commit e242df0
Showing 1 changed file with 3 additions and 7 deletions.
10 changes: 3 additions & 7 deletions tools/perf/util/callchain.c
Original file line number Diff line number Diff line change
Expand Up @@ -589,9 +589,7 @@ fill_node(struct callchain_node *node, struct callchain_cursor *cursor)
return -ENOMEM;
}
call->ip = cursor_node->ip;
call->ms = cursor_node->ms;
call->ms.map = map__get(call->ms.map);
call->ms.maps = maps__get(call->ms.maps);
map_symbol__copy(&call->ms, &cursor_node->ms);
call->srcline = cursor_node->srcline;

if (cursor_node->branch) {
Expand Down Expand Up @@ -1094,9 +1092,7 @@ int callchain_cursor_append(struct callchain_cursor *cursor,

node->ip = ip;
map_symbol__exit(&node->ms);
node->ms = *ms;
node->ms.maps = maps__get(ms->maps);
node->ms.map = map__get(ms->map);
map_symbol__copy(&node->ms, ms);
node->branch = branch;
node->nr_loop_iter = nr_loop_iter;
node->iter_cycles = iter_cycles;
Expand Down Expand Up @@ -1564,7 +1560,7 @@ int callchain_node__make_parent_list(struct callchain_node *node)
goto out;
*new = *chain;
new->has_children = false;
new->ms.map = map__get(new->ms.map);
map_symbol__copy(&new->ms, &chain->ms);
list_add_tail(&new->list, &head);
}
parent = parent->parent;
Expand Down

0 comments on commit e242df0

Please sign in to comment.