From b5ca8ea15bdb87c0a697974e248a2865328de3b6 Mon Sep 17 00:00:00 2001 From: Robert Griebl Date: Wed, 1 Mar 2023 11:56:49 +0100 Subject: Fix D-Bus registration error handling The inner try/catch block is a merge artifact and is actually hampering correct error handling, as the exit(2) call is a no-op before the event loop is started. We really want all exceptions that are supposed to stop the startup process to bubble up into setup(). Change-Id: Ic8f056346bfe927d89a21be740a9676f579cfdaa Reviewed-by: Bernd Weimer (cherry picked from commit 965dc087c8c79e2a2c1b9e415009ef442b46cdd6) Reviewed-by: Qt Cherry-pick Bot --- src/main-lib/main.cpp | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/src/main-lib/main.cpp b/src/main-lib/main.cpp index 25966a01..2e63e88e 100644 --- a/src/main-lib/main.cpp +++ b/src/main-lib/main.cpp @@ -972,26 +972,21 @@ void Main::setupDBus(const std::function &busForInterface } if (!noneOnly) { - try { - qCDebug(LogSystem) << "Registering D-Bus services:"; + qCDebug(LogSystem) << "Registering D-Bus services:"; - for (auto &&iface : ifaces) { - AbstractDBusContextAdaptor *dbusAdaptor = std::get<0>(iface); - QString &dbusName = std::get<1>(iface); - const char *interfaceName = std::get<4>(iface); + for (auto &&iface : ifaces) { + AbstractDBusContextAdaptor *dbusAdaptor = std::get<0>(iface); + QString &dbusName = std::get<1>(iface); + const char *interfaceName = std::get<4>(iface); - if (dbusName.isEmpty()) - continue; + if (dbusName.isEmpty()) + continue; - registerDBusObject(dbusAdaptor->generatedAdaptor(), dbusName, - std::get<2>(iface),interfaceName, std::get<3>(iface), - instanceId); - if (!DBusPolicy::add(dbusAdaptor->generatedAdaptor(), policyForInterface(interfaceName))) - throw Exception(Error::DBus, "could not set DBus policy for %1").arg(qL1S(interfaceName)); - } - } catch (const std::exception &e) { - qCCritical(LogSystem) << "ERROR:" << e.what(); - qApp->exit(2); + registerDBusObject(dbusAdaptor->generatedAdaptor(), dbusName, + std::get<2>(iface),interfaceName, std::get<3>(iface), + instanceId); + if (!DBusPolicy::add(dbusAdaptor->generatedAdaptor(), policyForInterface(interfaceName))) + throw Exception(Error::DBus, "could not set DBus policy for %1").arg(qL1S(interfaceName)); } } #else -- cgit v1.2.1