[sysprof] kernel: fix use of address array



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]