[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