Messages in this thread Patch in this message | | | Subject | [PATCH perf/core 09/13] perf: Make dso to use refcnt for debug | From | Masami Hiramatsu <> | Date | Wed, 18 Nov 2015 15:40:29 +0900 |
| |
Make 'dso' object to use refcnt interface for debug. This can find refcnt related memory leaks on dsos.
E.g. ---- # ./perf probe vfs_read Added new event: probe:vfs_read (on vfs_read)
You can now use it in all perf tools, such as:
perf record -e probe:vfs_read -aR sleep 1
REFCNT: BUG: Unreclaimed objects found. REFCNT: Total 75 objects are not reclaimed. To see all backtraces, rerun with -v option ----
Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> --- tools/perf/util/dso.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c index 7c0c083..28ad06a 100644 --- a/tools/perf/util/dso.c +++ b/tools/perf/util/dso.c @@ -1049,7 +1049,7 @@ struct dso *dso__new(const char *name) INIT_LIST_HEAD(&dso->node); INIT_LIST_HEAD(&dso->data.open_entry); pthread_mutex_init(&dso->lock, NULL); - atomic_set(&dso->refcnt, 1); + refcnt__init(dso, refcnt); } return dso; @@ -1081,19 +1081,20 @@ void dso__delete(struct dso *dso) dso__free_a2l(dso); zfree(&dso->symsrc_filename); pthread_mutex_destroy(&dso->lock); + refcnt__exit(dso, refcnt); free(dso); } struct dso *dso__get(struct dso *dso) { if (dso) - atomic_inc(&dso->refcnt); + refcnt__get(dso, refcnt); return dso; } void dso__put(struct dso *dso) { - if (dso && atomic_dec_and_test(&dso->refcnt)) + if (dso && refcnt__put(dso, refcnt)) dso__delete(dso); }
| |