diff options
author | Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io> | 2023-08-15 13:14:57 +0200 |
---|---|---|
committer | Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io> | 2023-08-21 12:18:33 +0200 |
commit | 7c9e61a3fe6da233571f24acf7ec9d9a8fc43210 (patch) | |
tree | 5fba00b8633e44a9f817b2bcf9128351cc1a9c8b | |
parent | 338de683950b3826edfc29c5d64da1df6b21a360 (diff) |
QDBusConnectionManager: Use invokeMethod() to create servers
Use QMetaObject::invokeMethod() with a lambda instead of setting
up a permanent signal/slot connections with BlockingQueuedConnection
type. This makes the code flow easier to follow.
Change-Id: Ib6566e7a4694ecbd69900b645d020b3331fb3462
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | src/dbus/qdbusconnectionmanager.cpp | 17 | ||||
-rw-r--r-- | src/dbus/qdbusconnectionmanager_p.h | 6 | ||||
-rw-r--r-- | src/dbus/qdbusserver.cpp | 4 |
3 files changed, 16 insertions, 11 deletions
diff --git a/src/dbus/qdbusconnectionmanager.cpp b/src/dbus/qdbusconnectionmanager.cpp index 96d8d32185..02b35420c5 100644 --- a/src/dbus/qdbusconnectionmanager.cpp +++ b/src/dbus/qdbusconnectionmanager.cpp @@ -74,8 +74,6 @@ QDBusConnectionManager::QDBusConnectionManager() connect(this, &QDBusConnectionManager::connectionRequested, this, &QDBusConnectionManager::executeConnectionRequest, Qt::BlockingQueuedConnection); - connect(this, &QDBusConnectionManager::serverRequested, - this, &QDBusConnectionManager::createServer, Qt::BlockingQueuedConnection); moveToThread(this); // ugly, don't do this in other projects #ifdef Q_OS_WIN @@ -223,12 +221,17 @@ void QDBusConnectionManager::executeConnectionRequest(QDBusConnectionManager::Co } } -void QDBusConnectionManager::createServer(const QString &address, void *server) +void QDBusConnectionManager::createServer(const QString &address, QDBusServer *server) { - QDBusErrorInternal error; - QDBusConnectionPrivate *d = new QDBusConnectionPrivate; - d->setServer(static_cast<QDBusServer *>(server), - q_dbus_server_listen(address.toUtf8().constData(), error), error); + QMetaObject::invokeMethod( + this, + [&address, server] { + QDBusErrorInternal error; + QDBusConnectionPrivate *d = new QDBusConnectionPrivate; + d->setServer(server, q_dbus_server_listen(address.toUtf8().constData(), error), + error); + }, + Qt::BlockingQueuedConnection); } QT_END_NAMESPACE diff --git a/src/dbus/qdbusconnectionmanager_p.h b/src/dbus/qdbusconnectionmanager_p.h index f6a153945a..e1eecf15a4 100644 --- a/src/dbus/qdbusconnectionmanager_p.h +++ b/src/dbus/qdbusconnectionmanager_p.h @@ -25,6 +25,8 @@ QT_BEGIN_NAMESPACE +class QDBusServer; + class QDBusConnectionManager : public QDaemonThread { Q_OBJECT @@ -42,18 +44,18 @@ public: QDBusConnectionPrivate *connectToBus(const QString &address, const QString &name); QDBusConnectionPrivate *connectToPeer(const QString &address, const QString &name); + void createServer(const QString &address, QDBusServer *server); + mutable QMutex mutex; signals: void connectionRequested(ConnectionRequestData *); - void serverRequested(const QString &address, void *server); protected: void run() override; private: void executeConnectionRequest(ConnectionRequestData *data); - void createServer(const QString &address, void *server); QHash<QString, QDBusConnectionPrivate *> connectionHash; diff --git a/src/dbus/qdbusserver.cpp b/src/dbus/qdbusserver.cpp index 2efc61a671..e298b14bf1 100644 --- a/src/dbus/qdbusserver.cpp +++ b/src/dbus/qdbusserver.cpp @@ -38,7 +38,7 @@ QDBusServer::QDBusServer(const QString &address, QObject *parent) if (!instance) return; - emit instance->serverRequested(address, this); + instance->createServer(address, this); Q_ASSERT(d != nullptr); QObject::connect(d, SIGNAL(newServerConnection(QDBusConnectionPrivate*)), @@ -67,7 +67,7 @@ QDBusServer::QDBusServer(QObject *parent) if (!instance) return; - emit instance->serverRequested(address, this); + instance->createServer(address, this); Q_ASSERT(d != nullptr); QObject::connect(d, SIGNAL(newServerConnection(QDBusConnectionPrivate*)), |