Messages in this thread | | | Date | Fri, 9 Jun 2023 11:17:42 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [PATCH v2 04/26] perf maps: Make delete static, always use put |
| |
Em Thu, Jun 08, 2023 at 04:28:01PM -0700, Ian Rogers escreveu: > Address/leak sanitizer with reference count checking can identify the > location of leaks, so use put rather than delete to avoid free-ing > memory when the reference count is >1. Add maps__zput to ensure the > variable is cleared.
Applied.
- Arnaldo
> Signed-off-by: Ian Rogers <irogers@google.com> > --- > tools/perf/tests/maps.c | 2 +- > tools/perf/util/machine.c | 2 +- > tools/perf/util/maps.c | 2 +- > tools/perf/util/maps.h | 9 ++++++++- > 4 files changed, 11 insertions(+), 4 deletions(-) > > diff --git a/tools/perf/tests/maps.c b/tools/perf/tests/maps.c > index 8c0eb5cf8bb5..5bb1123a91a7 100644 > --- a/tools/perf/tests/maps.c > +++ b/tools/perf/tests/maps.c > @@ -140,7 +140,7 @@ static int test__maps__merge_in(struct test_suite *t __maybe_unused, int subtest > ret = check_maps(merged3, ARRAY_SIZE(merged3), maps); > TEST_ASSERT_VAL("merge check failed", !ret); > > - maps__delete(maps); > + maps__zput(maps); > return TEST_OK; > } > > diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c > index 5d34d60a0045..8972c852d3bd 100644 > --- a/tools/perf/util/machine.c > +++ b/tools/perf/util/machine.c > @@ -248,7 +248,7 @@ void machine__exit(struct machine *machine) > return; > > machine__destroy_kernel_maps(machine); > - maps__delete(machine->kmaps); > + maps__zput(machine->kmaps); > dsos__exit(&machine->dsos); > machine__exit_vdso(machine); > zfree(&machine->root_dir); > diff --git a/tools/perf/util/maps.c b/tools/perf/util/maps.c > index 5ae6379a1b42..5206a6433117 100644 > --- a/tools/perf/util/maps.c > +++ b/tools/perf/util/maps.c > @@ -171,7 +171,7 @@ struct maps *maps__new(struct machine *machine) > return result; > } > > -void maps__delete(struct maps *maps) > +static void maps__delete(struct maps *maps) > { > maps__exit(maps); > unwind__finish_access(maps); > diff --git a/tools/perf/util/maps.h b/tools/perf/util/maps.h > index d2963456cfbe..83144e0645ed 100644 > --- a/tools/perf/util/maps.h > +++ b/tools/perf/util/maps.h > @@ -57,13 +57,20 @@ struct kmap { > }; > > struct maps *maps__new(struct machine *machine); > -void maps__delete(struct maps *maps); > bool maps__empty(struct maps *maps); > int maps__clone(struct thread *thread, struct maps *parent); > > struct maps *maps__get(struct maps *maps); > void maps__put(struct maps *maps); > > +static inline void __maps__zput(struct maps **map) > +{ > + maps__put(*map); > + *map = NULL; > +} > + > +#define maps__zput(map) __maps__zput(&map) > + > static inline struct rb_root *maps__entries(struct maps *maps) > { > return &RC_CHK_ACCESS(maps)->entries; > -- > 2.41.0.162.gfafddb0af9-goog >
--
- Arnaldo
| |