[sysprof] helpers: add async helper to list processes
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sysprof] helpers: add async helper to list processes
- Date: Wed, 29 May 2019 22:33:33 +0000 (UTC)
commit e54b17a4be2c42ac5e0965f49a98484577a81cdc
Author: Christian Hergert <chergert redhat com>
Date: Fri May 17 19:46:10 2019 -0700
helpers: add async helper to list processes
src/helpers.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/helpers.h | 35 ++++++++++++++++-----------
2 files changed, 97 insertions(+), 14 deletions(-)
---
diff --git a/src/helpers.c b/src/helpers.c
index ebba685..603ee99 100644
--- a/src/helpers.c
+++ b/src/helpers.c
@@ -328,3 +328,79 @@ helpers_can_see_pids (void)
return TRUE;
}
+
+static void
+helpers_list_processes_worker (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
+{
+ g_autofree gint32 *processes = NULL;
+ gsize n_processes;
+
+ g_assert (G_IS_TASK (task));
+ g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
+
+ if (helpers_list_processes (&processes, &n_processes))
+ {
+ GArray *ar;
+
+ ar = g_array_new (FALSE, FALSE, sizeof (gint32));
+ g_array_append_vals (ar, processes, n_processes);
+ g_task_return_pointer (task,
+ g_steal_pointer (&ar),
+ (GDestroyNotify) g_array_unref);
+
+ return;
+ }
+
+ g_task_return_new_error (task,
+ G_IO_ERROR,
+ G_IO_ERROR_FAILED,
+ "Failed to list processes");
+}
+
+void
+helpers_list_processes_async (GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_autoptr(GTask) task = NULL;
+
+ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
+
+ task = g_task_new (NULL, cancellable, callback, user_data);
+ g_task_set_source_tag (task, helpers_list_processes_async);
+ g_task_run_in_thread (task, helpers_list_processes_worker);
+}
+
+gboolean
+helpers_list_processes_finish (GAsyncResult *result,
+ gint32 **processes,
+ gsize *n_processes,
+ GError **error)
+{
+ g_autoptr(GArray) ret = NULL;
+
+ g_return_val_if_fail (G_IS_TASK (result), FALSE);
+
+ if ((ret = g_task_propagate_pointer (G_TASK (result), error)))
+ {
+ if (n_processes)
+ *n_processes = ret->len;
+
+ if (processes)
+ *processes = (gint32 *)(gpointer)g_array_free (ret, FALSE);
+
+ return TRUE;
+ }
+ else
+ {
+ if (processes)
+ *processes = NULL;
+ if (n_processes)
+ *n_processes = 0;
+ }
+
+ return FALSE;
+}
diff --git a/src/helpers.h b/src/helpers.h
index 212106b..0aa0470 100644
--- a/src/helpers.h
+++ b/src/helpers.h
@@ -27,19 +27,26 @@
G_BEGIN_DECLS
-gboolean helpers_can_see_pids (void);
-gboolean helpers_list_processes (gint32 **processes,
- gsize *n_processes);
-gboolean helpers_perf_event_open (GVariant *options,
- gint32 pid,
- gint32 cpu,
- gint group_fd,
- guint64 flags,
- gint *out_fd);
-gboolean helpers_get_proc_file (const gchar *path,
- gchar **contents,
- gsize *len);
-gboolean helpers_get_proc_fd (const gchar *path,
- gint *out_fd);
+gboolean helpers_can_see_pids (void);
+gboolean helpers_list_processes (gint32 **processes,
+ gsize *n_processes);
+void helpers_list_processes_async (GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean helpers_list_processes_finish (GAsyncResult *result,
+ gint32 **processes,
+ gsize *n_processes,
+ GError **error);
+gboolean helpers_perf_event_open (GVariant *options,
+ gint32 pid,
+ gint32 cpu,
+ gint group_fd,
+ guint64 flags,
+ gint *out_fd);
+gboolean helpers_get_proc_file (const gchar *path,
+ gchar **contents,
+ gsize *len);
+gboolean helpers_get_proc_fd (const gchar *path,
+ gint *out_fd);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]