Skip to content

Commit

Permalink
perf symbols: Fix multiple initialization of symbol system
Browse files Browse the repository at this point in the history
By returning immediately if it was already initialized, do it as well at
symbol__exit, refusing multiple deinitializations.

This fixes problems in the kmem, sched and timechart commands.

Reported-by: Davidlohr Bueso <dave@gnu.org>
Cc: Davidlohr Bueso <dave@gnu.org>
Signed-off-by: Jovi Zhang <bookjovi@gmail.com>
LKML-Reference: AANLkTi=9Cn=R8SPMCRp5z+gEjXbaBHeb-AaOtRbuwwcn@mail.gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Jovi Zhang authored and Arnaldo Carvalho de Melo committed Sep 9, 2010
1 parent da34634 commit 85e00b5
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 1 deletion.
7 changes: 7 additions & 0 deletions tools/perf/util/symbol.c
Original file line number Diff line number Diff line change
Expand Up @@ -2268,6 +2268,9 @@ static int setup_list(struct strlist **list, const char *list_str,

int symbol__init(void)
{
if (symbol_conf.initialized)
return 0;

elf_version(EV_CURRENT);
if (symbol_conf.sort_by_name)
symbol_conf.priv_size += (sizeof(struct symbol_name_rb_node) -
Expand All @@ -2293,6 +2296,7 @@ int symbol__init(void)
symbol_conf.sym_list_str, "symbol") < 0)
goto out_free_comm_list;

symbol_conf.initialized = true;
return 0;

out_free_dso_list:
Expand All @@ -2304,11 +2308,14 @@ int symbol__init(void)

void symbol__exit(void)
{
if (!symbol_conf.initialized)
return;
strlist__delete(symbol_conf.sym_list);
strlist__delete(symbol_conf.dso_list);
strlist__delete(symbol_conf.comm_list);
vmlinux_path__exit();
symbol_conf.sym_list = symbol_conf.dso_list = symbol_conf.comm_list = NULL;
symbol_conf.initialized = false;
}

int machines__create_kernel_maps(struct rb_root *self, pid_t pid)
Expand Down
3 changes: 2 additions & 1 deletion tools/perf/util/symbol.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ struct symbol_conf {
show_nr_samples,
use_callchain,
exclude_other,
show_cpu_utilization;
show_cpu_utilization,
initialized;
const char *vmlinux_name,
*source_prefix,
*field_sep;
Expand Down

0 comments on commit 85e00b5

Please sign in to comment.