From 35a7a647faf66b281b9ca952252f90e530aa3afb Mon Sep 17 00:00:00 2001 From: "Daniele E. Domenichelli" Date: Mon, 18 Apr 2011 11:21:05 -0500 Subject: QtDBus: Fix QDBusServer to handle correctly new dbus connections Merge-request: 2343 Reviewed-by: Marius Storm-Olsen Reviewed-by: Thiago Macieira --- src/dbus/qdbusintegrator.cpp | 15 ++++++--------- src/dbus/qdbusserver.cpp | 6 ++++-- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index a1cb209..e09b155 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -384,18 +384,16 @@ static void qDBusNewConnection(DBusServer *server, DBusConnection *connection, v // keep the connection alive q_dbus_connection_ref(connection); - QDBusConnectionPrivate *d = new QDBusConnectionPrivate; + QDBusConnectionPrivate *d = static_cast(data); // setPeer does the error handling for us QDBusErrorInternal error; d->setPeer(connection, error); QDBusConnection retval = QDBusConnectionPrivate::q(d); - d->setBusService(retval); // make QDBusServer emit the newConnection signal - QDBusConnectionPrivate *server_d = static_cast(data); - server_d->serverConnection(retval); + d->serverConnection(retval); } } // extern "C" @@ -1033,11 +1031,10 @@ void QDBusConnectionPrivate::closeConnection() mode = InvalidMode; // prevent reentrancy baseService.clear(); - if (oldMode == ServerMode) { - if (server) { - q_dbus_server_disconnect(server); - } - } else if (oldMode == ClientMode || oldMode == PeerMode) { + if (server) + q_dbus_server_disconnect(server); + + if (oldMode == ClientMode || oldMode == PeerMode) { if (connection) { q_dbus_connection_close(connection); // send the "close" message diff --git a/src/dbus/qdbusserver.cpp b/src/dbus/qdbusserver.cpp index 1fe80bd..3189b4e 100644 --- a/src/dbus/qdbusserver.cpp +++ b/src/dbus/qdbusserver.cpp @@ -62,14 +62,16 @@ QT_BEGIN_NAMESPACE QDBusServer::QDBusServer(const QString &address, QObject *parent) : QObject(parent) { + if (address.isEmpty()) + return; + if (!qdbus_loadLibDBus()) { d = 0; return; } d = new QDBusConnectionPrivate(this); - if (address.isEmpty()) - return; + d->name = QLatin1String("QDBusServer-") + QString::number(reinterpret_cast(d)); QObject::connect(d, SIGNAL(newServerConnection(QDBusConnection)), this, SIGNAL(newConnection(QDBusConnection))); -- cgit v0.12