From 20aa59c537c06272a3007a9430079749fb760f92 Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Mon, 25 Apr 2016 13:30:45 +0200 Subject: [PATCH] Properly cleanup open QDBusConnection's Everytime you connect to DBus, the connection stays open until it is manually disconnected or cleaned up by the QCoreApplication destructor. In case of xbus, ~QCoreApplication is not necessarily be called and the connection not cleaned up. Hence do it manually. refs #615 --- src/blackmisc/dbusserver.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/blackmisc/dbusserver.cpp b/src/blackmisc/dbusserver.cpp index a8b27974a..500aecf83 100644 --- a/src/blackmisc/dbusserver.cpp +++ b/src/blackmisc/dbusserver.cpp @@ -47,11 +47,11 @@ namespace BlackMisc break; case SERVERMODE_SYSTEMBUS: { - QDBusConnection connection = QDBusConnection::systemBus(); + QDBusConnection connection = QDBusConnection::connectToBus(QDBusConnection::SystemBus, coreServiceName()); if (!connection.isConnected()) { launchDBusDaemon(); - connection = QDBusConnection::systemBus(); + connection = QDBusConnection::connectToBus(QDBusConnection::SystemBus, coreServiceName()); } if (!connection.registerService(service)) @@ -90,6 +90,7 @@ namespace BlackMisc CDBusServer::~CDBusServer() { this->removeAllObjects(); + QDBusConnection::disconnectFromBus(coreServiceName()); } const QString &CDBusServer::coreServiceName() @@ -392,13 +393,19 @@ namespace BlackMisc } else { - QDBusConnection connection(dbusAddress == systemBusAddress() ? QDBusConnection::systemBus() : QDBusConnection::connectToBus(QDBusConnection::SessionBus, coreServiceName())); + QString name = coreServiceName(); + QDBusConnection connection = dbusAddress == systemBusAddress() ? + QDBusConnection::connectToBus(QDBusConnection::SystemBus, name) : + QDBusConnection::connectToBus(QDBusConnection::SessionBus, name); // todo: further checks would need to go here // failing session bus not detected yet o_message = connection.lastError().message(); - return connection.isConnected(); + bool isConnected = connection.isConnected(); + + QDBusConnection::disconnectFromBus(name); + return isConnected; } }