[sysprof] libsysprof: use daemon to get unredacted process info
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sysprof] libsysprof: use daemon to get unredacted process info
- Date: Wed, 29 May 2019 22:22:41 +0000 (UTC)
commit 6bb7eded8af70a98b6e2df9f02a5c815faae3a81
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]