mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 16:10:54 +00:00
helpers: add async helper to list processes
This commit is contained in:
@ -328,3 +328,79 @@ helpers_can_see_pids (void)
|
|||||||
|
|
||||||
return TRUE;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@ -27,19 +27,26 @@
|
|||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
gboolean helpers_can_see_pids (void);
|
gboolean helpers_can_see_pids (void);
|
||||||
gboolean helpers_list_processes (gint32 **processes,
|
gboolean helpers_list_processes (gint32 **processes,
|
||||||
gsize *n_processes);
|
gsize *n_processes);
|
||||||
gboolean helpers_perf_event_open (GVariant *options,
|
void helpers_list_processes_async (GCancellable *cancellable,
|
||||||
gint32 pid,
|
GAsyncReadyCallback callback,
|
||||||
gint32 cpu,
|
gpointer user_data);
|
||||||
gint group_fd,
|
gboolean helpers_list_processes_finish (GAsyncResult *result,
|
||||||
guint64 flags,
|
gint32 **processes,
|
||||||
gint *out_fd);
|
gsize *n_processes,
|
||||||
gboolean helpers_get_proc_file (const gchar *path,
|
GError **error);
|
||||||
gchar **contents,
|
gboolean helpers_perf_event_open (GVariant *options,
|
||||||
gsize *len);
|
gint32 pid,
|
||||||
gboolean helpers_get_proc_fd (const gchar *path,
|
gint32 cpu,
|
||||||
gint *out_fd);
|
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
|
G_END_DECLS
|
||||||
|
|||||||
Reference in New Issue
Block a user