[sysprof/wip/chergert/sysprof-3] libsysprof: use daemon to get unredacted process info



commit 028749b65e10c0e83abe83c8a1d0be144da7a4da
Author: Christian Hergert <chergert redhat com>
Date:   Fri May 10 20:29:52 2019 -0700

    libsysprof: use daemon to get unredacted process info

 src/libsysprof/sysprof-process-model.c | 44 +++++++++++++---------------------
 1 file changed, 16 insertions(+), 28 deletions(-)
---
diff --git a/src/libsysprof/sysprof-process-model.c b/src/libsysprof/sysprof-process-model.c
index d9bb339..93e0755 100644
--- a/src/libsysprof/sysprof-process-model.c
+++ b/src/libsysprof/sysprof-process-model.c
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 
 #include "sysprof-backport-autocleanups.h"
+#include "sysprof-helpers.h"
 #include "sysprof-process-model.h"
 #include "sysprof-process-model-item.h"
 
@@ -180,49 +181,36 @@ sysprof_process_model_reload_worker (GTask        *task,
                                      gpointer      task_data,
                                      GCancellable *cancellable)
 {
+  SysprofHelpers *helpers = sysprof_helpers_get_default ();
   g_autoptr(GPtrArray) ret = NULL;
-  const gchar *name;
-  GError *error = NULL;
-  GDir *dir;
+  g_autoptr(GVariant) info = NULL;
 
   g_assert (SYSPROF_IS_PROCESS_MODEL (source_object));
   g_assert (G_IS_TASK (task));
 
-  dir = g_dir_open ("/proc", 0, &error);
-
-  if (dir == NULL)
-    {
-      g_task_return_error (task, error);
-      return;
-    }
-
   ret = g_ptr_array_new_with_free_func (g_object_unref);
 
-  while ((name = g_dir_read_name (dir)))
+  if (sysprof_helpers_get_process_info (helpers, "pid,cmdline,comm", NULL, &info, NULL))
     {
-      SysprofProcessModelItem *item;
-      GPid pid;
-      gchar *end;
+      gsize n_children = g_variant_n_children (info);
 
-      pid = strtol (name, &end, 10);
-      if (pid <= 0 || *end != '\0')
-        continue;
+      for (gsize i = 0; i < n_children; i++)
+        {
+          g_autoptr(GVariant) pidinfo = g_variant_get_child_value (info, i);
+          g_autoptr(SysprofProcessModelItem) item = sysprof_process_model_item_new_from_variant (pidinfo);
 
-      item = sysprof_process_model_item_new (pid);
+          if (sysprof_process_model_item_is_kernel (item))
+            continue;
 
-      if (sysprof_process_model_item_is_kernel (item))
-        {
-          g_object_unref (item);
-          continue;
+          g_ptr_array_add (ret, g_steal_pointer (&item));
         }
 
-      g_ptr_array_add (ret, item);
+      g_ptr_array_sort (ret, compare_by_pid);
     }
 
-  g_dir_close (dir);
-
-  g_ptr_array_sort (ret, compare_by_pid);
-  g_task_return_pointer (task, g_ptr_array_ref (ret), (GDestroyNotify)g_ptr_array_unref);
+  g_task_return_pointer (task,
+                         g_steal_pointer (&ret),
+                         (GDestroyNotify)g_ptr_array_unref);
 }
 
 static gboolean


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]