• M
    perf tools: Fix __dsos__addnew to put dso after adding it to the list · 82de26ab
    Masami Hiramatsu 提交于
    __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: NMasami 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: NArnaldo Carvalho de Melo <acme@redhat.com>
    82de26ab
dso.c 31.0 KB