kdbus: share fd and pool with libdbuspolicy 79/201479/1 accepted/tizen/unified/20190322.075520 submit/tizen/20190321.094448
authorAdrian Szyndela <adrian.s@samsung.com>
Thu, 14 Mar 2019 12:46:10 +0000 (13:46 +0100)
committerAdrian Szyndela <adrian.s@samsung.com>
Thu, 14 Mar 2019 13:30:25 +0000 (14:30 +0100)
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

index 22426cd..72da995 100755 (executable)
@@ -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