[sysprof] kernel: fix use of address array
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sysprof] kernel: fix use of address array
- Date: Mon, 16 Nov 2020 22:56:03 +0000 (UTC)
commit c570f9650e898737b72fdd3a811c42db55c9946b
Author: Christian Hergert <chergert redhat com>
Date: Mon Nov 16 14:57:38 2020 -0800
kernel: fix use of address array
src/libsysprof/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 5975616..6e75429 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 171f6bc..a474cdd 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 83eabe4..d9cd773 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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]