From 4052794691fe5b96167cde9637ee14a401a65785 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 12 Nov 2012 12:36:47 -0500 Subject: [PATCH] main: request name unconditionally at startup the dbus activation machinery depends on daemons taking a name on the bus to complete activation without timeouts. fprintd fails prematurely if there is USB bus (as found in some virtual machine setups). This commit moves the bus-name-acquisition code to happen before the fail-from-no-usb-bus code to keep callers from timing out when activating fprintd. --- src/main.c | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/main.c b/src/main.c index 598a38f..0a0c5b4 100644 --- a/src/main.c +++ b/src/main.c @@ -316,6 +316,28 @@ int main(int argc, char **argv) g_log_set_always_fatal (fatal_mask); } + /* Obtain a connection to the session bus */ + fprintd_dbus_conn = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error); + if (fprintd_dbus_conn == NULL) { + g_warning("Failed to open connection to bus: %s", error->message); + return 1; + } + + driver_proxy = dbus_g_proxy_new_for_name(fprintd_dbus_conn, + DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); + + + if (!org_freedesktop_DBus_request_name(driver_proxy, FPRINT_SERVICE_NAME, + 0, &request_name_ret, &error)) { + g_warning("Failed to get name: %s", error->message); + return 1; + } + + if (request_name_ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { + g_warning ("Got result code %u from requesting name", request_name_ret); + return 1; + } + /* Load the configuration file, * and the default storage plugin */ if (!load_conf()) @@ -338,31 +360,10 @@ int main(int argc, char **argv) g_print("Launching FprintObject\n"); - /* Obtain a connection to the session bus */ - fprintd_dbus_conn = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error); - if (fprintd_dbus_conn == NULL) { - g_warning("Failed to open connection to bus: %s", error->message); - return 1; - } - /* create the one instance of the Manager object to be shared between * all fprintd users */ manager = fprint_manager_new(no_timeout); - driver_proxy = dbus_g_proxy_new_for_name(fprintd_dbus_conn, - DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); - - if (!org_freedesktop_DBus_request_name(driver_proxy, FPRINT_SERVICE_NAME, - 0, &request_name_ret, &error)) { - g_warning("Failed to get name: %s", error->message); - return 1; - } - - if (request_name_ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { - g_warning ("Got result code %u from requesting name", request_name_ret); - return 1; - } - g_message("D-Bus service launched with name: %s", FPRINT_SERVICE_NAME); g_message("entering main loop"); -- 1.8.0