From ce263929475111f172d936b967d6e0c423506a1d Mon Sep 17 00:00:00 2001 From: Radoslaw Pajak Date: Mon, 14 Oct 2013 11:13:14 +0200 Subject: [PATCH] [daemon-dev][daemon-fix] Registering starters extended and error set in make_kdbus_bus - registering activatable services as starters fixed and extended to allow easy updating them - fixed errors previously not set in make_kdbus_bus when returning NULL Change-Id: I4471d574dc7ebf2ed4a912129e21eddc8711a688 Signed-off-by: Radoslaw Pajak --- bus/connection.c | 7 +++++++ bus/connection.h | 1 + bus/kdbus-d.c | 25 +++++++++++++++++++++++-- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/bus/connection.c b/bus/connection.c index b8c3df8..925626e 100644 --- a/bus/connection.c +++ b/bus/connection.c @@ -2258,6 +2258,13 @@ bus_transaction_execute_and_free (BusTransaction *transaction) dbus_free (transaction); } +void +bus_transaction_free (BusTransaction *transaction) +{ + free_cancel_hooks (transaction); + dbus_free (transaction); +} + static void bus_connection_remove_transactions (DBusConnection *connection) { diff --git a/bus/connection.h b/bus/connection.h index 4b113ee..8a24ed5 100644 --- a/bus/connection.h +++ b/bus/connection.h @@ -135,6 +135,7 @@ dbus_bool_t bus_transaction_send_error_reply (BusTransaction * DBusMessage *in_reply_to); void bus_transaction_cancel_and_free (BusTransaction *transaction); void bus_transaction_execute_and_free (BusTransaction *transaction); +void bus_transaction_free (BusTransaction *transaction); dbus_bool_t bus_transaction_add_cancel_hook (BusTransaction *transaction, BusTransactionCancelFunction cancel_function, void *data, diff --git a/bus/kdbus-d.c b/bus/kdbus-d.c index a41bfd4..9e4f459 100644 --- a/bus/kdbus-d.c +++ b/bus/kdbus-d.c @@ -18,6 +18,7 @@ #include #include "connection.h" #include "activation.h" +#include "services.h" #include #include @@ -51,13 +52,13 @@ char* make_kdbus_bus(DBusBusType type, DBusError *error) char *bus; /*TODO Distinguish session and system bus make*/ - /*TODO Add dbus_set_error(error, DBUS_ERROR_FAILED, "...") (?)*/ _dbus_verbose("Opening /dev/kdbus/control\n"); fdc = open("/dev/kdbus/control", O_RDWR|O_CLOEXEC); if (fdc < 0) { _dbus_verbose("--- error %d (%m)\n", fdc); + dbus_set_error(error, DBUS_ERROR_FAILED, "Opening /dev/kdbus/control failed: %d (%m)", fdc); return NULL; } @@ -78,6 +79,7 @@ char* make_kdbus_bus(DBusBusType type, DBusError *error) if (ret) { _dbus_verbose("--- error %d (%m)\n", ret); + dbus_set_error(error, DBUS_ERROR_FAILED, "Creating bus '%s' failed: %d (%m)", bus_make.name, fdc); return NULL; } @@ -332,15 +334,22 @@ out: dbus_bool_t register_kdbus_starters(DBusConnection* connection) { - int i, len; + int i,j, len; char **services; dbus_bool_t retval = FALSE; int fd; + BusTransaction *transaction; + DBusString name; + + transaction = bus_transaction_new (bus_connection_get_context(connection)); + if (transaction == NULL) + return FALSE; if (!bus_activation_list_services (bus_connection_get_activation (connection), &services, &len)) return FALSE; _dbus_transport_get_socket_fd(dbus_connection_get_transport(connection), &fd); + _dbus_string_init(&name); for(i=0; i