From c570f9650e898737b72fdd3a811c42db55c9946b Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Mon, 16 Nov 2020 14:57:38 -0800 Subject: [PATCH] kernel: fix use of address array --- .../sysprof-kernel-symbol-resolver.c | 18 ++---------------- src/libsysprof/sysprof-kernel-symbol.c | 10 ++++++++-- src/libsysprof/sysprof-private.h | 2 +- 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/libsysprof/sysprof-kernel-symbol-resolver.c b/src/libsysprof/sysprof-kernel-symbol-resolver.c index 59756165..6e754297 100644 --- a/src/libsysprof/sysprof-kernel-symbol-resolver.c +++ b/src/libsysprof/sysprof-kernel-symbol-resolver.c @@ -95,7 +95,7 @@ sysprof_kernel_symbol_resolver_load (SysprofSymbolResolver *resolver, { if (data_fd != -1) close (data_fd); - self->symbols = _sysprof_kernel_symbols_ref_shared (); + self->symbols = _sysprof_kernel_symbols_get_shared (); return; } @@ -121,7 +121,7 @@ sysprof_kernel_symbol_resolver_load (SysprofSymbolResolver *resolver, } else { - self->symbols = _sysprof_kernel_symbols_ref_shared (); + self->symbols = _sysprof_kernel_symbols_get_shared (); } } @@ -138,23 +138,9 @@ G_DEFINE_TYPE_WITH_CODE (SysprofKernelSymbolResolver, G_IMPLEMENT_INTERFACE (SYSPROF_TYPE_SYMBOL_RESOLVER, symbol_resolver_iface_init)) -static void -sysprof_kernel_symbol_resolver_finalize (GObject *object) -{ - SysprofKernelSymbolResolver *self = (SysprofKernelSymbolResolver *)object; - - g_clear_pointer (&self->symbols, g_array_unref); - - G_OBJECT_CLASS (sysprof_kernel_symbol_resolver_parent_class)->finalize (object); -} - static void sysprof_kernel_symbol_resolver_class_init (SysprofKernelSymbolResolverClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = sysprof_kernel_symbol_resolver_finalize; - linux_quark = g_quark_from_static_string ("Kernel"); } diff --git a/src/libsysprof/sysprof-kernel-symbol.c b/src/libsysprof/sysprof-kernel-symbol.c index 171f6bcf..a474cdd9 100644 --- a/src/libsysprof/sysprof-kernel-symbol.c +++ b/src/libsysprof/sysprof-kernel-symbol.c @@ -149,12 +149,14 @@ _sysprof_kernel_symbols_new_from_kallsyms (SysprofKallsyms *kallsyms) } SysprofKernelSymbols * -_sysprof_kernel_symbols_ref_shared (void) +_sysprof_kernel_symbols_get_shared (void) { static SysprofKernelSymbols *shared; + static SysprofKernelSymbols empty[] = { 0 }; if (shared == NULL) { +#ifdef __linux__ SysprofHelpers *helpers = sysprof_helpers_get_default (); g_autofree gchar *contents = NULL; @@ -163,9 +165,13 @@ _sysprof_kernel_symbols_ref_shared (void) g_autoptr(SysprofKallsyms) kallsyms = sysprof_kallsyms_new_take (g_steal_pointer (&contents)); shared = _sysprof_kernel_symbols_new_from_kallsyms (kallsyms); } +#endif + + if (shared == NULL) + shared = empty; } - return g_array_ref (shared); + return shared; } static const SysprofKernelSymbol * diff --git a/src/libsysprof/sysprof-private.h b/src/libsysprof/sysprof-private.h index 83eabe47..d9cd7733 100644 --- a/src/libsysprof/sysprof-private.h +++ b/src/libsysprof/sysprof-private.h @@ -29,7 +29,7 @@ G_BEGIN_DECLS typedef GArray SysprofKernelSymbols; -SysprofKernelSymbols *_sysprof_kernel_symbols_ref_shared (void); +SysprofKernelSymbols *_sysprof_kernel_symbols_get_shared (void); SysprofKernelSymbols *_sysprof_kernel_symbols_new_from_kallsyms (SysprofKallsyms *kallsyms); const SysprofKernelSymbol *_sysprof_kernel_symbols_lookup (const SysprofKernelSymbols *self, SysprofCaptureAddress address);