提交 e8cdd947 编写于 作者: F Franck Bui-Huu 提交者: Arnaldo Carvalho de Melo

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: NFranck 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.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 a83eb3ea
...@@ -188,28 +188,27 @@ static struct thread_map *thread_map__new_by_pid_str(const char *pid_str) ...@@ -188,28 +188,27 @@ static struct thread_map *thread_map__new_by_pid_str(const char *pid_str)
nt = realloc(threads, (sizeof(*threads) + nt = realloc(threads, (sizeof(*threads) +
sizeof(pid_t) * total_tasks)); sizeof(pid_t) * total_tasks));
if (nt == NULL) if (nt == NULL)
goto out_free_threads; goto out_free_namelist;
threads = nt; threads = nt;
if (threads) { for (i = 0; i < items; i++) {
for (i = 0; i < items; i++) threads->map[j++] = atoi(namelist[i]->d_name);
threads->map[j++] = atoi(namelist[i]->d_name);
threads->nr = total_tasks;
}
for (i = 0; i < items; i++)
free(namelist[i]); free(namelist[i]);
}
threads->nr = total_tasks;
free(namelist); free(namelist);
if (!threads)
break;
} }
out: out:
strlist__delete(slist); strlist__delete(slist);
return threads; return threads;
out_free_namelist:
for (i = 0; i < items; i++)
free(namelist[i]);
free(namelist);
out_free_threads: out_free_threads:
free(threads); free(threads);
threads = NULL; threads = NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册