QDBusconnectionPrivate: Replace permanent connections with invokeMethod

Change-Id: Ife8d4495a98e34c8364293f3423b52f65ac187c4
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Ievgenii Meshcheriakov 2023-08-15 16:20:08 +02:00
parent 7f9d213765
commit 712149802b
2 changed files with 30 additions and 12 deletions

View File

@ -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);

View File

@ -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,10 +2246,20 @@ 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);
@ -2343,10 +2349,20 @@ 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);
@ -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)