diff options
author | Teemu Ikonen <tpikonen@mailbox.org> | 2024-03-19 22:03:06 +0200 |
---|---|---|
committer | Teemu Ikonen <tpikonen@mailbox.org> | 2024-04-01 23:31:28 +0300 |
commit | 3216c64386b7d2cffa86d61f89b446b4b90e86d6 (patch) | |
tree | 6d0c3694e7c37d3cf421cf87bb4526057af91965 | |
parent | a9caa550df128bb04f28b3f3c94d909b0d140e15 (diff) |
service-manager: Log client list on SIGUSR1
-rw-r--r-- | src/gclue-service-manager.c | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/src/gclue-service-manager.c b/src/gclue-service-manager.c index d6ac494..56322de 100644 --- a/src/gclue-service-manager.c +++ b/src/gclue-service-manager.c @@ -21,7 +21,9 @@ */ #include <glib/gi18n.h> +#include <glib-unix.h> #include <config.h> +#include <signal.h> #include "gclue-service-manager.h" #include "gclue-service-client.h" @@ -45,6 +47,7 @@ struct _GClueServiceManagerPrivate guint last_client_id; guint num_clients; + guint unix_signal_source; GClueLocator *locator; }; @@ -77,6 +80,37 @@ typedef struct } OnClientInfoNewReadyData; +static gboolean +log_client_list (gpointer user_data) +{ + GClueServiceManager *manager = GCLUE_SERVICE_MANAGER (user_data); + GList *l; + + g_message ("SIGUSR1 received, printing client list:"); + if (!manager->priv->clients) { + g_message (" (No clients)"); + return G_SOURCE_CONTINUE; + } + g_message (" System Active UID Id"); + for (l = manager->priv->clients; l != NULL; l = l->next) { + GClueDBusClient *dbus_client = GCLUE_DBUS_CLIENT (l->data); + GClueClientInfo *client_info = + gclue_service_client_get_client_info (GCLUE_SERVICE_CLIENT (l->data)); + GClueConfig *config; + guint32 uid; + const char *system, *active, *id; + const char *y = "x"; + const char *n = "-"; + id = gclue_dbus_client_get_desktop_id (dbus_client); + uid = gclue_client_info_get_user_id (client_info); + config = gclue_config_get_singleton (); + system = gclue_config_is_system_component (config, id) ? y : n; + active = gclue_dbus_client_get_active (dbus_client) ? y : n; + g_message (" %s %s %-7d %s", system, active, uid, id); + } + return G_SOURCE_CONTINUE; +} + static void on_client_info_new_ready_data_free (gpointer data) { @@ -588,6 +622,7 @@ gclue_service_manager_finalize (GObject *object) on_client_info_new_ready_data_free); priv->clients_waiting_agent = NULL; } + g_clear_handle_id (&priv->unix_signal_source, g_source_remove); /* Chain up to the parent class */ G_OBJECT_CLASS (gclue_service_manager_parent_class)->finalize (object); @@ -650,7 +685,8 @@ on_avail_accuracy_level_changed (GObject *object, static void gclue_service_manager_constructed (GObject *object) { - GClueServiceManagerPrivate *priv = GCLUE_SERVICE_MANAGER (object)->priv; + GClueServiceManager *manager = GCLUE_SERVICE_MANAGER (object); + GClueServiceManagerPrivate *priv = manager->priv; G_OBJECT_CLASS (gclue_service_manager_parent_class)->constructed (object); @@ -662,6 +698,7 @@ gclue_service_manager_constructed (GObject *object) on_avail_accuracy_level_changed (G_OBJECT (priv->locator), NULL, object); + priv->unix_signal_source = g_unix_signal_add (SIGUSR1, log_client_list, manager); } static void |