• Masami Hiramatsu's avatar
    perf tools: Fix __dsos__addnew to put dso after adding it to the list · 82de26ab
    Masami Hiramatsu authored
    __dsos__addnew should drop the constructor reference to dso after adding
    it to the list, because __dsos__add() will get a reference that will be
    kept while it is in the list.
    
    This fixes DSO leaks when entries are removed to the list and the refcount
    never gets to zero.
    
    Refcnt debugger shows:
      ==== [0] ====
      Unreclaimed dso: 0x2fccab0
      Refcount +1 => 1 at
        ./perf(dso__new+0x1ff) [0x4a62df]
        ./perf(__dsos__addnew+0x29) [0x4a6e19]
        ./perf(dsos__findnew+0xd1) [0x4a7281]
        ./perf(machine__findnew_kernel+0x27) [0x4a5e17]
        ./perf() [0x4b8df2]
        ./perf(machine__create_kernel_maps+0x28) [0x4bb528]
        ./perf(machine__new_host+0xfa) [0x4bb84a]
        ./perf(init_probe_symbol_maps+0x93) [0x506713]
        ./perf() [0x455ffa]
        ./perf(cmd_probe+0x6c) [0x4566bc]
        ./perf() [0x47abc5]
        ./perf(main+0x610) [0x421f90]
        /lib64/libc.so.6(__libc_start_main+0xf5) [0x7f46df132af5]
        ./perf() [0x4220a9]
      Refcount +1 => 2 at
        ./perf(__dsos__addnew+0xfb) [0x4a6eeb]
        ./perf(dsos__findnew+0xd1) [0x4a7281]
        ./perf(machine__findnew_kernel+0x27) [0x4a5e17]
        ./perf() [0x4b8df2]
        ./perf(machine__create_kernel_maps+0x28) [0x4bb528]
        ./perf(machine__new_host+0xfa) [0x4bb84a]
        ./perf(init_probe_symbol_maps+0x93) [0x506713]
        ./perf() [0x455ffa]
        ./perf(cmd_probe+0x6c) [0x4566bc]
        ./perf() [0x47abc5]
        ./perf(main+0x610) [0x421f90]
        /lib64/libc.so.6(__libc_start_main+0xf5) [0x7f46df132af5]
        ./perf() [0x4220a9]
      Refcount +1 => 3 at
        ./perf(dsos__findnew+0x7e) [0x4a722e]
        ./perf(machine__findnew_kernel+0x27) [0x4a5e17]
        ./perf() [0x4b8df2]
        ./perf(machine__create_kernel_maps+0x28) [0x4bb528]
        ./perf(machine__new_host+0xfa) [0x4bb84a]
        ./perf(init_probe_symbol_maps+0x93) [0x506713]
        ./perf() [0x455ffa]
        ./perf(cmd_probe+0x6c) [0x4566bc]
        ./perf() [0x47abc5]
        ./perf(main+0x610) [0x421f90]
        /lib64/libc.so.6(__libc_start_main+0xf5) [0x7f46df132af5]
        ./perf() [0x4220a9]
      [snip]
    Signed-off-by: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/20151118064031.30709.81460.stgit@localhost.localdomainSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    82de26ab
dso.c 31 KB