diff options
Diffstat (limited to 'src/dbus/qdbusserver.cpp')
-rw-r--r-- | src/dbus/qdbusserver.cpp | 53 |
1 files changed, 24 insertions, 29 deletions
diff --git a/src/dbus/qdbusserver.cpp b/src/dbus/qdbusserver.cpp index 21d422ac9e..e9131a14c4 100644 --- a/src/dbus/qdbusserver.cpp +++ b/src/dbus/qdbusserver.cpp @@ -38,9 +38,8 @@ QDBusServer::QDBusServer(const QString &address, QObject *parent) if (!instance) return; - emit instance->serverRequested(address, this); - QObject::connect(d, SIGNAL(newServerConnection(QDBusConnectionPrivate*)), - this, SLOT(_q_newConnection(QDBusConnectionPrivate*)), Qt::QueuedConnection); + instance->createServer(address, this); + Q_ASSERT(d != nullptr); } /*! @@ -49,25 +48,15 @@ QDBusServer::QDBusServer(const QString &address, QObject *parent) localhost (elsewhere). */ QDBusServer::QDBusServer(QObject *parent) - : QObject(parent), d(nullptr) -{ + : QDBusServer( #ifdef Q_OS_UNIX - // Use Unix sockets on Unix systems only - const QString address = QStringLiteral("unix:tmpdir=/tmp"); + // Use Unix sockets on Unix systems only + QStringLiteral("unix:tmpdir=/tmp"), #else - const QString address = QStringLiteral("tcp:"); + QStringLiteral("tcp:"), #endif - - if (!qdbus_loadLibDBus()) - return; - - QDBusConnectionManager *instance = QDBusConnectionManager::instance(); - if (!instance) - return; - - emit instance->serverRequested(address, this); - QObject::connect(d, SIGNAL(newServerConnection(QDBusConnectionPrivate*)), - this, SLOT(_q_newConnection(QDBusConnectionPrivate*)), Qt::QueuedConnection); + parent) +{ } /*! @@ -75,17 +64,17 @@ QDBusServer::QDBusServer(QObject *parent) */ QDBusServer::~QDBusServer() { - QMutex *managerMutex = nullptr; - if (QDBusConnectionManager::instance()) - managerMutex = &QDBusConnectionManager::instance()->mutex; - QMutexLocker locker(managerMutex); + if (!d) + return; + + auto manager = QDBusConnectionManager::instance(); + if (!manager) + return; + QWriteLocker writeLocker(&d->lock); - if (QDBusConnectionManager::instance()) { - for (const QString &name : std::as_const(d->serverConnectionNames)) - QDBusConnectionManager::instance()->removeConnection(name); - d->serverConnectionNames.clear(); - locker.unlock(); - } + manager->removeConnections(d->serverConnectionNames); + d->serverConnectionNames.clear(); + d->serverObject = nullptr; d->ref.storeRelaxed(0); d->deleteLater(); @@ -138,6 +127,9 @@ QString QDBusServer::address() const */ void QDBusServer::setAnonymousAuthenticationAllowed(bool value) { + if (!d) + return; + d->anonymousAuthenticationAllowed = value; } @@ -150,6 +142,9 @@ void QDBusServer::setAnonymousAuthenticationAllowed(bool value) */ bool QDBusServer::isAnonymousAuthenticationAllowed() const { + if (!d) + return false; + return d->anonymousAuthenticationAllowed; } |