[telepathy-qt4/master] ClientRegistrar: Make sure the list of registrars and adaptors is proper keyed per connection.

Andre Moreira Magalhaes (andrunko) andre.magalhaes at collabora.co.uk
Mon May 11 13:07:59 PDT 2009


---
 TelepathyQt4/client-registrar-internal.h |    7 ++++---
 TelepathyQt4/client-registrar.cpp        |   23 ++++++++++++++---------
 TelepathyQt4/client-registrar.h          |    2 +-
 3 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/TelepathyQt4/client-registrar-internal.h b/TelepathyQt4/client-registrar-internal.h
index c394bea..92a7b53 100644
--- a/TelepathyQt4/client-registrar-internal.h
+++ b/TelepathyQt4/client-registrar-internal.h
@@ -107,9 +107,10 @@ public: // Properties
     {
         // mAdaptorsForConnection includes this, so no need to start the set
         // with this->mHandledChannels
+        QList<ClientHandlerAdaptor*> adaptors(mAdaptorsForConnection.value(
+                    qMakePair(mBus.name(), mBus.baseService())));
         QSet<ChannelPtr> handledChannels;
-        foreach (ClientHandlerAdaptor *handlerAdaptor,
-                 mAdaptorsForConnection.value(mBus.baseService())) {
+        foreach (ClientHandlerAdaptor *handlerAdaptor, adaptors) {
             handledChannels.unite(handlerAdaptor->mHandledChannels);
         }
 
@@ -146,7 +147,7 @@ private:
     bool mProcessingHandleChannels;
     QSet<ChannelPtr> mHandledChannels;
 
-    static QHash<QString, QList<ClientHandlerAdaptor *> > mAdaptorsForConnection;
+    static QHash<QPair<QString, QString>, QList<ClientHandlerAdaptor *> > mAdaptorsForConnection;
 };
 
 class ClientHandlerAdaptor::HandleChannelsCall : public QObject
diff --git a/TelepathyQt4/client-registrar.cpp b/TelepathyQt4/client-registrar.cpp
index 93491b8..dfa472e 100644
--- a/TelepathyQt4/client-registrar.cpp
+++ b/TelepathyQt4/client-registrar.cpp
@@ -48,7 +48,7 @@ ClientAdaptor::~ClientAdaptor()
 {
 }
 
-QHash<QString, QList<ClientHandlerAdaptor *> > ClientHandlerAdaptor::mAdaptorsForConnection;
+QHash<QPair<QString, QString>, QList<ClientHandlerAdaptor *> > ClientHandlerAdaptor::mAdaptorsForConnection;
 
 ClientHandlerAdaptor::ClientHandlerAdaptor(const QDBusConnection &bus,
         AbstractClientHandler *client,
@@ -59,17 +59,18 @@ ClientHandlerAdaptor::ClientHandlerAdaptor(const QDBusConnection &bus,
       mProcessingHandleChannels(false)
 {
     QList<ClientHandlerAdaptor *> &handlerAdaptors =
-        mAdaptorsForConnection[mBus.baseService()];
+        mAdaptorsForConnection[qMakePair(mBus.name(), mBus.baseService())];
     handlerAdaptors.append(this);
 }
 
 ClientHandlerAdaptor::~ClientHandlerAdaptor()
 {
+    QPair<QString, QString> busId = qMakePair(mBus.name(), mBus.baseService());
     QList<ClientHandlerAdaptor *> &handlerAdaptors =
-        mAdaptorsForConnection[mBus.baseService()];
+        mAdaptorsForConnection[busId];
     handlerAdaptors.removeOne(this);
     if (handlerAdaptors.isEmpty()) {
-        mAdaptorsForConnection.remove(mBus.baseService());
+        mAdaptorsForConnection.remove(busId);
     }
 }
 
@@ -377,7 +378,7 @@ struct ClientRegistrar::Private
     QSet<QString> services;
 };
 
-QHash<QString, ClientRegistrar*> ClientRegistrar::registrarForConnection;
+QHash<QPair<QString, QString>, ClientRegistrar*> ClientRegistrar::registrarForConnection;
 
 ClientRegistrarPtr ClientRegistrar::create()
 {
@@ -387,9 +388,11 @@ ClientRegistrarPtr ClientRegistrar::create()
 
 ClientRegistrarPtr ClientRegistrar::create(const QDBusConnection &bus)
 {
-    if (registrarForConnection.contains(bus.baseService())) {
+    QPair<QString, QString> busId =
+        qMakePair(bus.name(), bus.baseService());
+    if (registrarForConnection.contains(busId)) {
         return ClientRegistrarPtr(
-                registrarForConnection.value(bus.baseService()));
+                registrarForConnection.value(busId));
     }
     return ClientRegistrarPtr(new ClientRegistrar(bus));
 }
@@ -397,12 +400,14 @@ ClientRegistrarPtr ClientRegistrar::create(const QDBusConnection &bus)
 ClientRegistrar::ClientRegistrar(const QDBusConnection &bus)
     : mPriv(new Private(bus))
 {
-    registrarForConnection.insert(bus.baseService(), this);
+    registrarForConnection.insert(qMakePair(bus.name(),
+                bus.baseService()), this);
 }
 
 ClientRegistrar::~ClientRegistrar()
 {
-    registrarForConnection.remove(mPriv->bus.baseService());
+    registrarForConnection.remove(qMakePair(mPriv->bus.name(),
+                mPriv->bus.baseService()));
     unregisterClients();
     delete mPriv;
 }
diff --git a/TelepathyQt4/client-registrar.h b/TelepathyQt4/client-registrar.h
index cb1ef62..503ba29 100644
--- a/TelepathyQt4/client-registrar.h
+++ b/TelepathyQt4/client-registrar.h
@@ -61,7 +61,7 @@ private:
     friend struct Private;
     Private *mPriv;
 
-    static QHash<QString, ClientRegistrar *> registrarForConnection;
+    static QHash<QPair<QString, QString>, ClientRegistrar *> registrarForConnection;
 };
 
 } // Tp
-- 
1.5.6.5




More information about the telepathy-commits mailing list