提交 934e0f20 编写于 作者: A Adrian Hunter 提交者: Arnaldo Carvalho de Melo

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: NAdrian Hunter <adrian.hunter@intel.com>
Acked-by: NJiri 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.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 fce4d296
......@@ -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,
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);
evlist->threads = threads;
if (threads != evlist->threads) {
thread_map__put(evlist->threads);
evlist->threads = threads;
}
perf_evlist__propagate_maps(evlist);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册