Blob Blame History Raw
From 9577b6db03115c78f90bb644348ef765f00d95d9 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 12 Nov 2012 17:36:47 +0000
Subject: 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.

https://bugs.freedesktop.org/show_bug.cgi?id=57025
---
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");
--
cgit v0.9.0.2-2-gbebe