diff options
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/util/evlist.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 5bd3b49452c6..78ff52ee8788 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c | |||
@@ -1155,11 +1155,22 @@ out_delete_threads: | |||
1155 | void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus, | 1155 | void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus, |
1156 | struct thread_map *threads) | 1156 | struct thread_map *threads) |
1157 | { | 1157 | { |
1158 | cpu_map__put(evlist->cpus); | 1158 | /* |
1159 | evlist->cpus = cpus; | 1159 | * Allow for the possibility that one or another of the maps isn't being |
1160 | * changed i.e. don't put it. Note we are assuming the maps that are | ||
1161 | * being applied are brand new and evlist is taking ownership of the | ||
1162 | * original reference count of 1. If that is not the case it is up to | ||
1163 | * the caller to increase the reference count. | ||
1164 | */ | ||
1165 | if (cpus != evlist->cpus) { | ||
1166 | cpu_map__put(evlist->cpus); | ||
1167 | evlist->cpus = cpus; | ||
1168 | } | ||
1160 | 1169 | ||
1161 | thread_map__put(evlist->threads); | 1170 | if (threads != evlist->threads) { |
1162 | evlist->threads = threads; | 1171 | thread_map__put(evlist->threads); |
1172 | evlist->threads = threads; | ||
1173 | } | ||
1163 | 1174 | ||
1164 | perf_evlist__propagate_maps(evlist); | 1175 | perf_evlist__propagate_maps(evlist); |
1165 | } | 1176 | } |