• Arnaldo Carvalho de Melo's avatar
    perf tests: Fix map_groups refcount test · 8b00f469
    Arnaldo Carvalho de Melo authored
    When introducing reference counting for struct thread instances I forgot
    to remove the synthetic threads from the machine's rbtree so that it
    then the threads would have just one reference and thus the
    thread__put() replacing the thread__delete() really turns into a
    thread__delete() (thread->refcnt == 1 at thread__put() time) and thus
    drop the thread->mg refcount, as expected by the this test.
    
    Fix it by calling machine__remove_thread() (the counterpart of
    machine__findnew_thread()) on all the synthetic threads after the
    checks that involves the rbtree were done.
    
    Before:
    
      # perf test -v mg
      30: Test thread mg sharing                                 :
      --- start ---
      test child forked, pid 26995
      FAILED tests/thread-mg-share.c:68 wrong refcnt (4 != 3)
      test child finished with -1
      ---- end ----
      Test thread mg sharing: FAILED!
      #
    
    After:
    
      # perf test mg
      30: Test thread mg sharing: Ok
      #
    
    Fixes: b91fc39f ("perf machine: Protect the machine->threads with a rwlock")
    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-uoqq0fjei90ohhhcboz6ay33@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    8b00f469
thread-mg-share.c 2.61 KB