diff options
author | Ievgenii Meshcheriakov <[email protected]> | 2023-08-15 16:20:08 +0200 |
---|---|---|
committer | Ievgenii Meshcheriakov <[email protected]> | 2023-08-26 17:24:13 +0200 |
commit | 712149802b1e79a1bb7ec6f20b2db6fa01950cea (patch) | |
tree | 0f39b7ce9405fd55815b753b7c723d30ca90d58c | |
parent | 7f9d2137654de0ee041c74cbccb958a3a803996c (diff) |
QDBusconnectionPrivate: Replace permanent connections with invokeMethod
Change-Id: Ife8d4495a98e34c8364293f3423b52f65ac187c4
Reviewed-by: MÃ¥rten Nordheim <[email protected]>
Reviewed-by: Thiago Macieira <[email protected]>
-rw-r--r-- | src/dbus/qdbusconnection_p.h | 10 | ||||
-rw-r--r-- | src/dbus/qdbusintegrator.cpp | 32 |
2 files changed, 30 insertions, 12 deletions
diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h index 1af6ce08420..39e8c9a574b 100644 --- a/src/dbus/qdbusconnection_p.h +++ b/src/dbus/qdbusconnection_p.h @@ -245,6 +245,12 @@ private: void handleAuthentication(); + bool addSignalHook(const QString &key, const SignalHook &hook); + bool removeSignalHook(const QString &key, const SignalHook &hook); + + bool addSignalHookImpl(const QString &key, const SignalHook &hook); + bool removeSignalHookImpl(const QString &key, const SignalHook &hook); + protected: void timerEvent(QTimerEvent *e) override; @@ -256,8 +262,6 @@ public slots: void socketWrite(qintptr); void objectDestroyed(QObject *o); void relaySignal(QObject *obj, const QMetaObject *, int signalId, const QVariantList &args); - bool addSignalHook(const QString &key, const SignalHook &hook); - bool removeSignalHook(const QString &key, const SignalHook &hook); private slots: void serviceOwnerChangedNoLock(const QString &name, const QString &oldOwner, const QString &newOwner); @@ -269,8 +273,6 @@ signals: void dispatchStatusChanged(); void spyHooksFinished(const QDBusMessage &msg); void messageNeedsSending(QDBusPendingCallPrivate *pcall, void *msg, int timeout = -1); - bool signalNeedsConnecting(const QString &key, const QDBusConnectionPrivate::SignalHook &hook); - bool signalNeedsDisconnecting(const QString &key, const QDBusConnectionPrivate::SignalHook &hook); void serviceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner); void callWithCallbackFailed(const QDBusError &error, const QDBusMessage &message); void newServerConnection(QDBusConnectionPrivate *newConnection); diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index 1bc827daf58..a1e8bec7dab 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -1050,10 +1050,6 @@ QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p) this, &QDBusConnectionPrivate::handleObjectCall, Qt::QueuedConnection); connect(this, &QDBusConnectionPrivate::messageNeedsSending, this, &QDBusConnectionPrivate::sendInternal); - connect(this, &QDBusConnectionPrivate::signalNeedsConnecting, - this, &QDBusConnectionPrivate::addSignalHook, Qt::BlockingQueuedConnection); - connect(this, &QDBusConnectionPrivate::signalNeedsDisconnecting, - this, &QDBusConnectionPrivate::removeSignalHook, Qt::BlockingQueuedConnection); rootNode.flags = 0; @@ -2250,11 +2246,21 @@ bool QDBusConnectionPrivate::connectSignal(const QString &service, } Q_ASSERT(thread() != QThread::currentThread()); - return emit signalNeedsConnecting(key, hook); + return addSignalHook(key, hook); } bool QDBusConnectionPrivate::addSignalHook(const QString &key, const SignalHook &hook) { + bool result = false; + + QMetaObject::invokeMethod(this, &QDBusConnectionPrivate::addSignalHookImpl, + Qt::BlockingQueuedConnection, qReturnArg(result), key, hook); + + return result; +} + +bool QDBusConnectionPrivate::addSignalHookImpl(const QString &key, const SignalHook &hook) +{ QDBusWriteLocker locker(ConnectAction, this); // avoid duplicating: @@ -2343,11 +2349,21 @@ bool QDBusConnectionPrivate::disconnectSignal(const QString &service, } Q_ASSERT(thread() != QThread::currentThread()); - return emit signalNeedsDisconnecting(key, hook); + return removeSignalHook(key, hook); } bool QDBusConnectionPrivate::removeSignalHook(const QString &key, const SignalHook &hook) { + bool result = false; + + QMetaObject::invokeMethod(this, &QDBusConnectionPrivate::removeSignalHookImpl, + Qt::BlockingQueuedConnection, qReturnArg(result), key, hook); + + return result; +} + +bool QDBusConnectionPrivate::removeSignalHookImpl(const QString &key, const SignalHook &hook) +{ // remove it from our list: QDBusWriteLocker locker(ConnectAction, this); QDBusConnectionPrivate::SignalHookHash::Iterator it = signalHooks.find(key); @@ -2475,7 +2491,7 @@ void QDBusConnectionPrivate::connectRelay(const QString &service, } Q_ASSERT(thread() != QThread::currentThread()); - emit signalNeedsConnecting(key, hook); + addSignalHook(key, hook); } void QDBusConnectionPrivate::disconnectRelay(const QString &service, @@ -2499,7 +2515,7 @@ void QDBusConnectionPrivate::disconnectRelay(const QString &service, } Q_ASSERT(thread() != QThread::currentThread()); - emit signalNeedsDisconnecting(key, hook); + removeSignalHook(key, hook); } bool QDBusConnectionPrivate::shouldWatchService(const QString &service) |