perf tools: fix thread_map__new_by_pid_str() memory leak in error path
The namelist array (including its content) was not freed if we fail to realloc a new 'threads' structure. Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> Cc: David Ahern <dsahern@gmail.com> Link: http://lkml.kernel.org/r/1337952109-31995-1-git-send-email-fbuihuu@gmail.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
a83eb3ea97
Коммит
e8cdd94777
|
@ -188,28 +188,27 @@ static struct thread_map *thread_map__new_by_pid_str(const char *pid_str)
|
|||
nt = realloc(threads, (sizeof(*threads) +
|
||||
sizeof(pid_t) * total_tasks));
|
||||
if (nt == NULL)
|
||||
goto out_free_threads;
|
||||
goto out_free_namelist;
|
||||
|
||||
threads = nt;
|
||||
|
||||
if (threads) {
|
||||
for (i = 0; i < items; i++)
|
||||
threads->map[j++] = atoi(namelist[i]->d_name);
|
||||
threads->nr = total_tasks;
|
||||
}
|
||||
|
||||
for (i = 0; i < items; i++)
|
||||
for (i = 0; i < items; i++) {
|
||||
threads->map[j++] = atoi(namelist[i]->d_name);
|
||||
free(namelist[i]);
|
||||
}
|
||||
threads->nr = total_tasks;
|
||||
free(namelist);
|
||||
|
||||
if (!threads)
|
||||
break;
|
||||
}
|
||||
|
||||
out:
|
||||
strlist__delete(slist);
|
||||
return threads;
|
||||
|
||||
out_free_namelist:
|
||||
for (i = 0; i < items; i++)
|
||||
free(namelist[i]);
|
||||
free(namelist);
|
||||
|
||||
out_free_threads:
|
||||
free(threads);
|
||||
threads = NULL;
|
||||
|
|
Загрузка…
Ссылка в новой задаче