From 94f54c063808d696229cf308ed1ec604d9ae66e0 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Thu, 1 Aug 2019 12:57:27 +0200 Subject: [PATCH] main: Register the common name after initializing the manager When creating the FprintManager object the devices will be enumerated. This operation calls the mainloop recursively. We do not want to receive any client requests before the initial enumeration has happened. Because of this, move the registration of the common name to happen after the enumeration has finished. --- src/main.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main.c b/src/main.c index 05184ea..4037808 100644 --- a/src/main.c +++ b/src/main.c @@ -171,18 +171,6 @@ int main(int argc, char **argv) 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()) @@ -197,6 +185,22 @@ int main(int argc, char **argv) * all fprintd users */ manager = fprint_manager_new(no_timeout); + /* Obtain the well-known name after the manager has been initialized. + * Otherwise a client immediately enumerating the devices will not see + * any. */ + 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); + g_object_unref (manager); + return 1; + } + + if (request_name_ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { + g_warning ("Got result code %u from requesting name", request_name_ret); + g_object_unref (manager); + return 1; + } + g_debug("D-Bus service launched with name: %s", FPRINT_SERVICE_NAME); g_debug("entering main loop");