提交 faa5c5c3 编写于 作者: A Arnaldo Carvalho de Melo 提交者: Ingo Molnar

perf tools: Don't use parent comm if not set at fork time

As the parent comm then is worthless, confusing users about the
thread where the sample really happened, leading to think that
the sample happened in the parent, not where it really happened,
in the children of a thread for which a PERF_RECORD_COMM event
was not received.
Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
LKML-Reference: <1266627727-19715-1-git-send-email-acme@infradead.org>
Signed-off-by: NIngo Molnar <mingo@elte.hu>
上级 10fe12ef
...@@ -36,7 +36,10 @@ int thread__set_comm(struct thread *self, const char *comm) ...@@ -36,7 +36,10 @@ int thread__set_comm(struct thread *self, const char *comm)
if (self->comm) if (self->comm)
free(self->comm); free(self->comm);
self->comm = strdup(comm); self->comm = strdup(comm);
return self->comm ? 0 : -ENOMEM; if (self->comm == NULL)
return -ENOMEM;
self->comm_set = true;
return 0;
} }
int thread__comm_len(struct thread *self) int thread__comm_len(struct thread *self)
...@@ -255,11 +258,14 @@ int thread__fork(struct thread *self, struct thread *parent) ...@@ -255,11 +258,14 @@ int thread__fork(struct thread *self, struct thread *parent)
{ {
int i; int i;
if (parent->comm_set) {
if (self->comm) if (self->comm)
free(self->comm); free(self->comm);
self->comm = strdup(parent->comm); self->comm = strdup(parent->comm);
if (!self->comm) if (!self->comm)
return -ENOMEM; return -ENOMEM;
self->comm_set = true;
}
for (i = 0; i < MAP__NR_TYPES; ++i) for (i = 0; i < MAP__NR_TYPES; ++i)
if (map_groups__clone(&self->mg, &parent->mg, i) < 0) if (map_groups__clone(&self->mg, &parent->mg, i) < 0)
......
...@@ -15,6 +15,7 @@ struct thread { ...@@ -15,6 +15,7 @@ struct thread {
struct map_groups mg; struct map_groups mg;
pid_t pid; pid_t pid;
char shortname[3]; char shortname[3];
bool comm_set;
char *comm; char *comm;
int comm_len; int comm_len;
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册