From 46635fbaaa9d5c6c4ab5293301e6606e61ed864b Mon Sep 17 00:00:00 2001 From: Adrian Szyndela Date: Thu, 14 Mar 2019 13:46:10 +0100 Subject: [PATCH] kdbus: share fd and pool with libdbuspolicy This uses new functionality of libdbuspolicy: using client's pool and fd. This way libdbuspolicy doesn't have to create its own connection, and what is more important it doesn't have to create its own 1MB pool. This is at the cost of using client's pool for receiving responses to ioctl(KDBUS_CMD_GET_CONN_INFO), which are small. Change-Id: If31a3636be87f04559781f2ba68cb05c1c18d865 --- gio/gkdbus.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/gio/gkdbus.c b/gio/gkdbus.c index 22426cd..72da995 100755 --- a/gio/gkdbus.c +++ b/gio/gkdbus.c @@ -583,7 +583,7 @@ _g_kdbus_can_connect (GKDBusWorker *worker, GError **error) { #ifdef LIBDBUSPOLICY - worker->dbuspolicy = dbuspolicy1_init (worker->address); + worker->dbuspolicy = dbuspolicy1_init_shared (worker->address, worker->fd); if (worker->dbuspolicy == NULL) { g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Cannot load dbus policy for kdbus transport or access to bus denied by security policy")); @@ -615,7 +615,7 @@ _g_kdbus_close (GKDBusWorker *worker) worker->thread = NULL; - g_free (worker->address); + g_free ((char*)worker->address); close (worker->fd); worker->fd = -1; @@ -868,6 +868,10 @@ _g_kdbus_Hello (GKDBusWorker *worker, g_kdbus_free_data (worker, cmd->offset); +#ifdef LIBDBUSPOLICY + dbuspolicy1_init_set_pool (worker->dbuspolicy, worker->kdbus_buffer); +#endif + return worker->unique_name; } @@ -3657,6 +3661,7 @@ check_result_to_error_reply (GDBusMessage *message, } #endif +#ifdef LIBDBUSPOLICY static void send_error_message (GKDBusWorker *worker, GDBusMessage *message) @@ -3667,7 +3672,7 @@ send_error_message (GKDBusWorker *worker, reply_data->message = message; g_main_context_invoke (worker->context, deliver_synthetic_reply, reply_data); } - +#endif /* * _g_kdbus_send -- 2.7.4