Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 85e00b55 authored by Jovi Zhang's avatar Jovi Zhang Committed by Arnaldo Carvalho de Melo
Browse files

perf symbols: Fix multiple initialization of symbol system



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: default avatarDavidlohr Bueso <dave@gnu.org>
Cc: Davidlohr Bueso <dave@gnu.org>
Signed-off-by: default avatarJovi Zhang <bookjovi@gmail.com>
LKML-Reference: AANLkTi=9Cn=R8SPMCRp5z+gEjXbaBHeb-AaOtRbuwwcn@mail.gmail.com
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent da34634f
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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) -
@@ -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:
@@ -2304,11 +2308,14 @@ out_free_comm_list:

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)
+2 −1
Original line number Diff line number Diff line
@@ -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;