lkml.org 
[lkml]   [2015]   [May]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 17/25] perf machine: Mark removed threads as such
    Date
    From: Arnaldo Carvalho de Melo <acme@redhat.com>

    We use:

    BUG_ON(!RB_EMPTY_NODE(&thread->rb_node));

    in the thread destructor as a debugging check to find out about
    possibly still referenced thread instances being deleted, to do that
    we need to make sure we use RB_CLEAR_NODE() right after rb_erase(),
    i.e. that we use the newly introduced rb_erase_init(), that works
    just like list_del_init().

    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Don Zickus <dzickus@redhat.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Stephane Eranian <eranian@google.com>
    Link: http://lkml.kernel.org/n/tip-4fcqo5ypy1cjjf15ilb0hn78@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/util/machine.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
    index 7ec3188d3cb3..6bf845758ae3 100644
    --- a/tools/perf/util/machine.c
    +++ b/tools/perf/util/machine.c
    @@ -400,7 +400,7 @@ static struct thread *____machine__findnew_thread(struct machine *machine,
    * leader and that would screwed the rb tree.
    */
    if (thread__init_map_groups(th, machine)) {
    - rb_erase(&th->rb_node, &machine->threads);
    + rb_erase_init(&th->rb_node, &machine->threads);
    RB_CLEAR_NODE(&th->rb_node);
    thread__delete(th);
    return NULL;
    @@ -1314,7 +1314,7 @@ static void __machine__remove_thread(struct machine *machine, struct thread *th,
    BUG_ON(atomic_read(&th->refcnt) == 0);
    if (lock)
    pthread_rwlock_wrlock(&machine->threads_lock);
    - rb_erase(&th->rb_node, &machine->threads);
    + rb_erase_init(&th->rb_node, &machine->threads);
    RB_CLEAR_NODE(&th->rb_node);
    /*
    * Move it first to the dead_threads list, then drop the reference,
    --
    2.1.0


    \
     
     \ /
      Last update: 2015-05-27 18:21    [W:4.227 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site