summaryrefslogtreecommitdiffstats
path: root/src/dbus/qdbusintegrator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dbus/qdbusintegrator.cpp')
-rw-r--r--src/dbus/qdbusintegrator.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
index eada7b7792..18a25b0b9f 100644
--- a/src/dbus/qdbusintegrator.cpp
+++ b/src/dbus/qdbusintegrator.cpp
@@ -50,6 +50,7 @@
#include "qdbusargument.h"
#include "qdbusconnection_p.h"
+#include "qdbusconnectionmanager_p.h"
#include "qdbusinterface_p.h"
#include "qdbusmessage.h"
#include "qdbusmetatype.h"
@@ -385,16 +386,21 @@ static void qDBusNewConnection(DBusServer *server, DBusConnection *connection, v
// keep the connection alive
q_dbus_connection_ref(connection);
- QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
+ QDBusConnectionPrivate *serverConnection = static_cast<QDBusConnectionPrivate *>(data);
+
+ QDBusConnectionPrivate *newConnection = new QDBusConnectionPrivate(serverConnection->parent());
+ QMutexLocker locker(&QDBusConnectionManager::instance()->mutex);
+ QDBusConnectionManager::instance()->setConnection(QLatin1String("QDBusServer-") + QString::number(reinterpret_cast<qulonglong>(newConnection)), newConnection);
+ serverConnection->serverConnectionNames << newConnection->name;
// setPeer does the error handling for us
QDBusErrorInternal error;
- d->setPeer(connection, error);
+ newConnection->setPeer(connection, error);
- QDBusConnection retval = QDBusConnectionPrivate::q(d);
+ QDBusConnection retval = QDBusConnectionPrivate::q(newConnection);
// make QDBusServer emit the newConnection signal
- d->serverConnection(retval);
+ serverConnection->serverConnection(retval);
}
} // extern "C"