perf hist: Add error path into hist_entry__init
Adding error path into hist_entry__init to unify error handling, so every new member does not need to free everything else. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Jonas Rabenstein <jonas.rabenstein@studium.uni-erlangen.de> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com> Cc: nageswara r sastry <nasastry@in.ibm.com> Link: http://lkml.kernel.org/r/20190305152536.21035-3-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
e34c940245
Коммит
c57589106f
|
@ -396,11 +396,8 @@ static int hist_entry__init(struct hist_entry *he,
|
||||||
* adding new entries. So we need to save a copy.
|
* adding new entries. So we need to save a copy.
|
||||||
*/
|
*/
|
||||||
he->branch_info = malloc(sizeof(*he->branch_info));
|
he->branch_info = malloc(sizeof(*he->branch_info));
|
||||||
if (he->branch_info == NULL) {
|
if (he->branch_info == NULL)
|
||||||
map__zput(he->ms.map);
|
goto err;
|
||||||
free(he->stat_acc);
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(he->branch_info, template->branch_info,
|
memcpy(he->branch_info, template->branch_info,
|
||||||
sizeof(*he->branch_info));
|
sizeof(*he->branch_info));
|
||||||
|
@ -419,21 +416,8 @@ static int hist_entry__init(struct hist_entry *he,
|
||||||
|
|
||||||
if (he->raw_data) {
|
if (he->raw_data) {
|
||||||
he->raw_data = memdup(he->raw_data, he->raw_size);
|
he->raw_data = memdup(he->raw_data, he->raw_size);
|
||||||
|
if (he->raw_data == NULL)
|
||||||
if (he->raw_data == NULL) {
|
goto err_infos;
|
||||||
map__put(he->ms.map);
|
|
||||||
if (he->branch_info) {
|
|
||||||
map__put(he->branch_info->from.map);
|
|
||||||
map__put(he->branch_info->to.map);
|
|
||||||
free(he->branch_info);
|
|
||||||
}
|
|
||||||
if (he->mem_info) {
|
|
||||||
map__put(he->mem_info->iaddr.map);
|
|
||||||
map__put(he->mem_info->daddr.map);
|
|
||||||
}
|
|
||||||
free(he->stat_acc);
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
INIT_LIST_HEAD(&he->pairs.node);
|
INIT_LIST_HEAD(&he->pairs.node);
|
||||||
thread__get(he->thread);
|
thread__get(he->thread);
|
||||||
|
@ -444,6 +428,21 @@ static int hist_entry__init(struct hist_entry *he,
|
||||||
he->leaf = true;
|
he->leaf = true;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
err_infos:
|
||||||
|
if (he->branch_info) {
|
||||||
|
map__put(he->branch_info->from.map);
|
||||||
|
map__put(he->branch_info->to.map);
|
||||||
|
free(he->branch_info);
|
||||||
|
}
|
||||||
|
if (he->mem_info) {
|
||||||
|
map__put(he->mem_info->iaddr.map);
|
||||||
|
map__put(he->mem_info->daddr.map);
|
||||||
|
}
|
||||||
|
err:
|
||||||
|
map__zput(he->ms.map);
|
||||||
|
free(he->stat_acc);
|
||||||
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *hist_entry__zalloc(size_t size)
|
static void *hist_entry__zalloc(size_t size)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче