Commit-ID:  d25380cd3be38baff4ab31935b9d19b7f58ba7ac
Gitweb:     http://git.kernel.org/tip/d25380cd3be38baff4ab31935b9d19b7f58ba7ac
Author:     David Ahern <dsah...@gmail.com>
AuthorDate: Sun, 26 Aug 2012 12:24:41 -0600
Committer:  Arnaldo Carvalho de Melo <a...@redhat.com>
CommitDate: Wed, 5 Sep 2012 17:17:30 -0300

perf session: flush_sample_queue needs to handle errors from handlers

Allows errors to propogate through event processing code and back to
commands.

Signed-off-by: David Ahern <dsah...@gmail.com>
Cc: Frederic Weisbecker <fweis...@gmail.com>
Cc: Ingo Molnar <mi...@kernel.org>
Cc: Peter Zijlstra <pet...@infradead.org>
Link: 
http://lkml.kernel.org/r/1346005487-62961-2-git-send-email-dsah...@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com>
---
 tools/perf/util/session.c |   24 +++++++++++++++---------
 1 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index f7bb7ae..9453758 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -692,7 +692,7 @@ static int perf_session_deliver_event(struct perf_session 
*session,
                                      struct perf_tool *tool,
                                      u64 file_offset);
 
-static void flush_sample_queue(struct perf_session *s,
+static int flush_sample_queue(struct perf_session *s,
                               struct perf_tool *tool)
 {
        struct ordered_samples *os = &s->ordered_samples;
@@ -705,7 +705,7 @@ static void flush_sample_queue(struct perf_session *s,
        int ret;
 
        if (!tool->ordered_samples || !limit)
-               return;
+               return 0;
 
        list_for_each_entry_safe(iter, tmp, head, list) {
                if (iter->timestamp > limit)
@@ -715,9 +715,12 @@ static void flush_sample_queue(struct perf_session *s,
                                                s->header.needs_swap);
                if (ret)
                        pr_err("Can't parse sample, err = %d\n", ret);
-               else
-                       perf_session_deliver_event(s, iter->event, &sample, 
tool,
-                                                  iter->file_offset);
+               else {
+                       ret = perf_session_deliver_event(s, iter->event, 
&sample, tool,
+                                                        iter->file_offset);
+                       if (ret)
+                               return ret;
+               }
 
                os->last_flush = iter->timestamp;
                list_del(&iter->list);
@@ -737,6 +740,8 @@ static void flush_sample_queue(struct perf_session *s,
        }
 
        os->nr_samples = 0;
+
+       return 0;
 }
 
 /*
@@ -782,10 +787,11 @@ static int process_finished_round(struct perf_tool *tool,
                                  union perf_event *event __used,
                                  struct perf_session *session)
 {
-       flush_sample_queue(session, tool);
-       session->ordered_samples.next_flush = 
session->ordered_samples.max_timestamp;
+       int ret = flush_sample_queue(session, tool);
+       if (!ret)
+               session->ordered_samples.next_flush = 
session->ordered_samples.max_timestamp;
 
-       return 0;
+       return ret;
 }
 
 /* The queue is ordered by time */
@@ -1443,7 +1449,7 @@ more:
        err = 0;
        /* do the final flush for ordered samples */
        session->ordered_samples.next_flush = ULLONG_MAX;
-       flush_sample_queue(session, tool);
+       err = flush_sample_queue(session, tool);
 out_err:
        perf_session__warn_about_errors(session, tool);
        perf_session_free_sample_buffers(session);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to