mirror of https://gitee.com/openkylin/linux.git
perf evlist: Make set_maps() more resilient
Make perf_evlist__set_maps() more resilient by allowing for the possibility that one or another of the maps isn't being changed and therefore should not be "put". Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@intel.com> Link: http://lkml.kernel.org/r/1441699142-18905-9-git-send-email-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
fce4d296b4
commit
934e0f2053
|
@ -1155,11 +1155,22 @@ int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
|
||||||
void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
|
void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
|
||||||
struct thread_map *threads)
|
struct thread_map *threads)
|
||||||
{
|
{
|
||||||
cpu_map__put(evlist->cpus);
|
/*
|
||||||
evlist->cpus = cpus;
|
* Allow for the possibility that one or another of the maps isn't being
|
||||||
|
* changed i.e. don't put it. Note we are assuming the maps that are
|
||||||
|
* being applied are brand new and evlist is taking ownership of the
|
||||||
|
* original reference count of 1. If that is not the case it is up to
|
||||||
|
* the caller to increase the reference count.
|
||||||
|
*/
|
||||||
|
if (cpus != evlist->cpus) {
|
||||||
|
cpu_map__put(evlist->cpus);
|
||||||
|
evlist->cpus = cpus;
|
||||||
|
}
|
||||||
|
|
||||||
thread_map__put(evlist->threads);
|
if (threads != evlist->threads) {
|
||||||
evlist->threads = threads;
|
thread_map__put(evlist->threads);
|
||||||
|
evlist->threads = threads;
|
||||||
|
}
|
||||||
|
|
||||||
perf_evlist__propagate_maps(evlist);
|
perf_evlist__propagate_maps(evlist);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue