perf tools: Don't use parent comm if not set at fork time
authorArnaldo Carvalho de Melo <acme@redhat.com>
Sat, 20 Feb 2010 01:02:07 +0000 (23:02 -0200)
committerIngo Molnar <mingo@elte.hu>
Sun, 21 Feb 2010 16:48:24 +0000 (17:48 +0100)
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>
tools/perf/util/thread.c
tools/perf/util/thread.h

index 634b7f7140d52796f60c168aeed8d1f1758c6916..9e8995eaf2b61332e650fb2c4dfde6d615c6ae3e 100644 (file)
@@ -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)
@@ -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)
index 56f317b8a06cec1f5d91a62cea42456f329b9960..0a28f39de545f5810893fe44b87af0f895000037 100644 (file)
@@ -15,6 +15,7 @@ struct thread {
        struct map_groups       mg;
        pid_t                   pid;
        char                    shortname[3];
+       bool                    comm_set;
        char                    *comm;
        int                     comm_len;
 };
This page took 0.039439 seconds and 5 git commands to generate.