summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2023-08-15 13:14:57 +0200
committerIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2023-08-21 12:18:33 +0200
commit7c9e61a3fe6da233571f24acf7ec9d9a8fc43210 (patch)
tree5fba00b8633e44a9f817b2bcf9128351cc1a9c8b
parent338de683950b3826edfc29c5d64da1df6b21a360 (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.cpp17
-rw-r--r--src/dbus/qdbusconnectionmanager_p.h6
-rw-r--r--src/dbus/qdbusserver.cpp4
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*)),