Skip to content

Commit

Permalink
perf python: Fix pyrf_evlist__read_on_cpu event consuming
Browse files Browse the repository at this point in the history
We can't consume the event before parsing it. Under heavy load we could
get caught by kernel writer overwriting the event we're trying to parse.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1468148882-10362-5-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Jiri Olsa authored and Arnaldo Carvalho de Melo committed Jul 12, 2016
1 parent ad4e3c0 commit e8968e6
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions tools/perf/util/python.c
Original file line number Diff line number Diff line change
Expand Up @@ -865,12 +865,14 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,
PyObject *pyevent = pyrf_event__new(event);
struct pyrf_event *pevent = (struct pyrf_event *)pyevent;

perf_evlist__mmap_consume(evlist, cpu);

if (pyevent == NULL)
return PyErr_NoMemory();

err = perf_evlist__parse_sample(evlist, event, &pevent->sample);

/* Consume the even only after we parsed it out. */
perf_evlist__mmap_consume(evlist, cpu);

if (err)
return PyErr_Format(PyExc_OSError,
"perf: can't parse sample, err=%d", err);
Expand Down

0 comments on commit e8968e6

Please sign in to comment.