kernel: fix use of address array

This commit is contained in:
Christian Hergert
2020-11-16 14:57:38 -08:00
parent 04eacbcfe2
commit c570f9650e
3 changed files with 11 additions and 19 deletions

View File

@ -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");
}

View File

@ -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 *

View File

@ -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);