lkml.org 
[lkml]   [2016]   [Feb]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] perf callchain: Check return value of split_add_child()
    Commit-ID:  f2bb4c5af4fe16d8b1e4ae371e1ceaa817380a88
    Gitweb: http://git.kernel.org/tip/f2bb4c5af4fe16d8b1e4ae371e1ceaa817380a88
    Author: Namhyung Kim <namhyung@kernel.org>
    AuthorDate: Tue, 16 Feb 2016 23:08:23 +0900
    Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
    CommitDate: Fri, 19 Feb 2016 19:14:36 -0300

    perf callchain: Check return value of split_add_child()

    Now create_child() and add_child() return errors so check and pass it
    to the caller.

    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Cc: Andi Kleen <andi@firstfloor.org>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/r/1455631723-17345-6-git-send-email-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/util/callchain.c | 12 +++++++++---
    1 file changed, 9 insertions(+), 3 deletions(-)

    diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c
    index dab2c1f..5259379 100644
    --- a/tools/perf/util/callchain.c
    +++ b/tools/perf/util/callchain.c
    @@ -508,7 +508,7 @@ static enum match_result match_chain(struct callchain_cursor_node *node,
    * give a part of its callchain to the created child.
    * Then create another child to host the given callchain of new branch
    */
    -static void
    +static int
    split_add_child(struct callchain_node *parent,
    struct callchain_cursor *cursor,
    struct callchain_list *to_split,
    @@ -520,6 +520,8 @@ split_add_child(struct callchain_node *parent,

    /* split */
    new = create_child(parent, true);
    + if (new == NULL)
    + return -1;

    /* split the callchain and move a part to the new child */
    old_tail = parent->val.prev;
    @@ -554,7 +556,7 @@ split_add_child(struct callchain_node *parent,
    node = callchain_cursor_current(cursor);
    new = add_child(parent, cursor, period);
    if (new == NULL)
    - return;
    + return -1;

    /*
    * This is second child since we moved parent's children
    @@ -576,6 +578,7 @@ split_add_child(struct callchain_node *parent,
    parent->hit = period;
    parent->count = 1;
    }
    + return 0;
    }

    static enum match_result
    @@ -670,7 +673,10 @@ append_chain(struct callchain_node *root,

    /* we match only a part of the node. Split it and add the new chain */
    if (matches < root->val_nr) {
    - split_add_child(root, cursor, cnode, start, matches, period);
    + if (split_add_child(root, cursor, cnode, start, matches,
    + period) < 0)
    + return MATCH_ERROR;
    +
    return MATCH_EQ;
    }

    \
     
     \ /
      Last update: 2016-02-20 13:01    [W:3.813 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site