Skip to content

Commit

Permalink
perf tools: Don't use parent comm if not set at fork time
Browse files Browse the repository at this point in the history
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: Arnaldo 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: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Arnaldo Carvalho de Melo authored and Ingo Molnar committed Feb 21, 2010
1 parent 10fe12e commit faa5c5c
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
18 changes: 12 additions & 6 deletions tools/perf/util/thread.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,10 @@ int thread__set_comm(struct thread *self, const char *comm)
if (self->comm)
free(self->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)
Expand Down Expand Up @@ -255,11 +258,14 @@ int thread__fork(struct thread *self, struct thread *parent)
{
int i;

if (self->comm)
free(self->comm);
self->comm = strdup(parent->comm);
if (!self->comm)
return -ENOMEM;
if (parent->comm_set) {
if (self->comm)
free(self->comm);
self->comm = strdup(parent->comm);
if (!self->comm)
return -ENOMEM;
self->comm_set = true;
}

for (i = 0; i < MAP__NR_TYPES; ++i)
if (map_groups__clone(&self->mg, &parent->mg, i) < 0)
Expand Down
1 change: 1 addition & 0 deletions tools/perf/util/thread.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ struct thread {
struct map_groups mg;
pid_t pid;
char shortname[3];
bool comm_set;
char *comm;
int comm_len;
};
Expand Down

0 comments on commit faa5c5c

Please sign in to comment.