Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf symbols: Remove open coded management of long_name_allocated member

Instead of expecting callers to set this member accodingly so that later
at dso destruction it can, if needed, be correctly free()d, make it a
requirement by passing it as a parameter to dso__set_long_name.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-na7t1tqim22vuqkt4zq5n4ri@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+16 -13
+9 -4
tools/perf/util/dso.c
··· 386 386 return dso; 387 387 } 388 388 389 - void dso__set_long_name(struct dso *dso, char *name) 389 + void dso__set_long_name(struct dso *dso, char *name, bool name_allocated) 390 390 { 391 391 if (name == NULL) 392 392 return; 393 - dso->long_name = name; 394 - dso->long_name_len = strlen(name); 393 + 394 + if (dso->long_name_allocated) 395 + free(dso->long_name); 396 + 397 + dso->long_name = name; 398 + dso->long_name_len = strlen(name); 399 + dso->long_name_allocated = name_allocated; 395 400 } 396 401 397 402 void dso__set_short_name(struct dso *dso, const char *name, bool name_allocated) ··· 449 444 if (dso != NULL) { 450 445 int i; 451 446 strcpy(dso->name, name); 452 - dso__set_long_name(dso, dso->name); 447 + dso__set_long_name(dso, dso->name, false); 453 448 dso__set_short_name(dso, dso->name, false); 454 449 for (i = 0; i < MAP__NR_TYPES; ++i) 455 450 dso->symbols[i] = dso->symbol_names[i] = RB_ROOT;
+1 -1
tools/perf/util/dso.h
··· 111 111 void dso__delete(struct dso *dso); 112 112 113 113 void dso__set_short_name(struct dso *dso, const char *name, bool name_allocated); 114 - void dso__set_long_name(struct dso *dso, char *name); 114 + void dso__set_long_name(struct dso *dso, char *name, bool name_allocated); 115 115 116 116 int dso__name_len(const struct dso *dso); 117 117
+1 -2
tools/perf/util/machine.c
··· 763 763 ret = -1; 764 764 goto out; 765 765 } 766 - dso__set_long_name(map->dso, long_name); 767 - map->dso->long_name_allocated = 1; 766 + dso__set_long_name(map->dso, long_name, true); 768 767 dso__kernel_module_get_build_id(map->dso, ""); 769 768 } 770 769 }
+4 -5
tools/perf/util/symbol.c
··· 1159 1159 dso->data_type = DSO_BINARY_TYPE__GUEST_KCORE; 1160 1160 else 1161 1161 dso->data_type = DSO_BINARY_TYPE__KCORE; 1162 - dso__set_long_name(dso, strdup(kcore_filename)); 1162 + dso__set_long_name(dso, strdup(kcore_filename), true); 1163 1163 1164 1164 close(fd); 1165 1165 ··· 1438 1438 dso->data_type = DSO_BINARY_TYPE__GUEST_VMLINUX; 1439 1439 else 1440 1440 dso->data_type = DSO_BINARY_TYPE__VMLINUX; 1441 - dso__set_long_name(dso, (char *)vmlinux); 1442 - dso->long_name_allocated = vmlinux_allocated; 1441 + dso__set_long_name(dso, (char *)vmlinux, vmlinux_allocated); 1443 1442 dso__set_loaded(dso, map->type); 1444 1443 pr_debug("Using %s for symbols\n", symfs_vmlinux); 1445 1444 } ··· 1630 1631 free(kallsyms_allocated_filename); 1631 1632 1632 1633 if (err > 0 && !dso__is_kcore(dso)) { 1633 - dso__set_long_name(dso, strdup("[kernel.kallsyms]")); 1634 + dso__set_long_name(dso, strdup("[kernel.kallsyms]"), true); 1634 1635 map__fixup_start(map); 1635 1636 map__fixup_end(map); 1636 1637 } ··· 1678 1679 pr_debug("Using %s for symbols\n", kallsyms_filename); 1679 1680 if (err > 0 && !dso__is_kcore(dso)) { 1680 1681 machine__mmap_name(machine, path, sizeof(path)); 1681 - dso__set_long_name(dso, strdup(path)); 1682 + dso__set_long_name(dso, strdup(path), true); 1682 1683 map__fixup_start(map); 1683 1684 map__fixup_end(map); 1684 1685 }
+1 -1
tools/perf/util/vdso.c
··· 103 103 dso = dso__new(VDSO__MAP_NAME); 104 104 if (dso != NULL) { 105 105 dsos__add(head, dso); 106 - dso__set_long_name(dso, file); 106 + dso__set_long_name(dso, file, false); 107 107 } 108 108 } 109 109