From e7c9d7d29452ffb0a074c393493649abc65153ec Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 8 Apr 2014 14:39:03 +0200 Subject: [PATCH] refs #199 , method to unregister DBus objects for a graceful shutdown of our DBusServer --- src/blackcore/dbus_server.cpp | 28 ++++++++++++++++++++++++++++ src/blackcore/dbus_server.h | 13 ++++++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/blackcore/dbus_server.cpp b/src/blackcore/dbus_server.cpp index 07c1dae13..9bcd59722 100644 --- a/src/blackcore/dbus_server.cpp +++ b/src/blackcore/dbus_server.cpp @@ -145,5 +145,33 @@ namespace BlackCore return this->m_busServer.lastError(); } + /* + * Unregister all objects + */ + void CDBusServer::unregisterAllObjects() + { + if (this->m_objects.isEmpty()) return; + foreach(QString path, this->m_objects.keys()) + { + switch (this->m_serverMode) + { + case CDBusServer::SERVERMODE_SESSIONBUS: + QDBusConnection::sessionBus().unregisterObject(path); + break; + case CDBusServer::SERVERMODE_SYSTEMBUS: + QDBusConnection::systemBus().unregisterObject(path); + break; + case CDBusServer::SERVERMODE_P2P: + { + foreach(QDBusConnection con, this->m_DBusConnections) + { + con.unregisterObject(path); + } + break; + } + } + } // all paths + } + } // namespace BlackCore diff --git a/src/blackcore/dbus_server.h b/src/blackcore/dbus_server.h index 16677f7fe..5bfe8cb7e 100644 --- a/src/blackcore/dbus_server.h +++ b/src/blackcore/dbus_server.h @@ -80,9 +80,14 @@ namespace BlackCore - //! \brief Connection by name - const QDBusConnection getDbusConnection(const QString &connectionName) const + /*! + * \brief Connection by name + * \param connectionName empty string makes sense with session / system DBus, otherwise provide name for P2P + * \return + */ + const QDBusConnection getDBusConnection(const QString &connectionName = "") { + if (connectionName.isEmpty()) return this->m_DBusConnections.first(); return this->m_DBusConnections.value(connectionName, CDBusServer::defaultConnection()); } @@ -93,7 +98,9 @@ namespace BlackCore return this->m_DBusConnections.values(); } - //! \brief Default connection + //! Unregister all objects + void unregisterAllObjects(); + //! Default connection static const QDBusConnection &defaultConnection() {