perf session: Free the ref_reloc_sym memory at the right place
Which is at perf_session__destroy_kernel_maps, counterpart to the
perf_session__create_kernel_maps where the kmap structure is located, just
after the vmlinux_maps.
Make it also check if the kernel maps were actually created, which may not
be the case if, for instance, perf_session__new can't complete due to
permission problems in, for instance, a 'perf report' case, when a
segfault will take place, that is how this was noticed.
The problem was introduced in d65a458
, thus post .35.
This also adds code to release guest machines as them are also created
in perf_session__create_kernel_maps, so should be deleted on this newly
introduced counterpart, perf_session__destroy_kernel_maps.
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
LKML-Reference: <new-submission>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
@ -79,6 +79,12 @@ int perf_session__create_kernel_maps(struct perf_session *self)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void perf_session__destroy_kernel_maps(struct perf_session *self)
|
||||
{
|
||||
machine__destroy_kernel_maps(&self->host_machine);
|
||||
machines__destroy_guest_kernel_maps(&self->machines);
|
||||
}
|
||||
|
||||
struct perf_session *perf_session__new(const char *filename, int mode, bool force, bool repipe)
|
||||
{
|
||||
size_t len = filename ? strlen(filename) + 1 : 0;
|
||||
@ -150,6 +156,7 @@ static void perf_session__delete_threads(struct perf_session *self)
|
||||
void perf_session__delete(struct perf_session *self)
|
||||
{
|
||||
perf_header__exit(&self->header);
|
||||
perf_session__destroy_kernel_maps(self);
|
||||
perf_session__delete_dead_threads(self);
|
||||
perf_session__delete_threads(self);
|
||||
machine__exit(&self->host_machine);
|
||||
|
Reference in New Issue
Block a user