Skip to content

Commit

Permalink
perf tools: Don't die in perf_header_attr__new()
Browse files Browse the repository at this point in the history
We really should propagate such kinds of errors so that users of
these library functions decide what to do in such cases instead
of exiting in random places like now.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <1258407027-384-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 Nov 17, 2009
1 parent c34984b commit dc79c0f
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 14 deletions.
5 changes: 4 additions & 1 deletion tools/perf/builtin-record.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,8 @@ static struct perf_header_attr *get_header_attr(struct perf_event_attr *a, int n
h_attr = header->attr[nr];
} else {
h_attr = perf_header_attr__new(a);
perf_header__add_attr(header, h_attr);
if (h_attr != NULL)
perf_header__add_attr(header, h_attr);
}

return h_attr;
Expand Down Expand Up @@ -308,6 +309,8 @@ static void create_counter(int counter, int cpu, pid_t pid)
}

h_attr = get_header_attr(attr, counter);
if (h_attr == NULL)
die("nomem\n");

if (!file_new) {
if (memcmp(&h_attr->attr, attr, sizeof(*attr))) {
Expand Down
22 changes: 12 additions & 10 deletions tools/perf/util/header.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@ struct perf_header_attr *perf_header_attr__new(struct perf_event_attr *attr)
{
struct perf_header_attr *self = malloc(sizeof(*self));

if (!self)
die("nomem");

self->attr = *attr;
self->ids = 0;
self->size = 1;
self->id = malloc(sizeof(u64));

if (!self->id)
die("nomem");
if (self != NULL) {
self->attr = *attr;
self->ids = 0;
self->size = 1;
self->id = malloc(sizeof(u64));
if (self->id == NULL) {
free(self);
self = NULL;
}
}

return self;
}
Expand Down Expand Up @@ -423,6 +423,8 @@ struct perf_header *perf_header__read(int fd)
tmp = lseek(fd, 0, SEEK_CUR);

attr = perf_header_attr__new(&f_attr.attr);
if (attr == NULL)
die("nomem");

nr_ids = f_attr.ids.size / sizeof(u64);
lseek(fd, f_attr.ids.offset, SEEK_SET);
Expand Down
4 changes: 1 addition & 3 deletions tools/perf/util/header.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,7 @@ void perf_header__add_attr(struct perf_header *self,
void perf_header__push_event(u64 id, const char *name);
char *perf_header__find_event(u64 id);


struct perf_header_attr *
perf_header_attr__new(struct perf_event_attr *attr);
struct perf_header_attr *perf_header_attr__new(struct perf_event_attr *attr);
void perf_header_attr__add_id(struct perf_header_attr *self, u64 id);

u64 perf_header__sample_type(struct perf_header *header);
Expand Down

0 comments on commit dc79c0f

Please sign in to comment.