summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libresourceqt/src/resource-engine.cpp19
-rw-r--r--libresourceqt/src/resource-set.cpp42
2 files changed, 43 insertions, 18 deletions
diff --git a/libresourceqt/src/resource-engine.cpp b/libresourceqt/src/resource-engine.cpp
index e4068d2..dae826b 100644
--- a/libresourceqt/src/resource-engine.cpp
+++ b/libresourceqt/src/resource-engine.cpp
@@ -3,6 +3,8 @@
using namespace ResourcePolicy;
+static QMultiMap<resconn_t *, ResourceEngine *> engineMap;
+
resconn_t *ResourceEngine::libresourceConnection = NULL;
quint32 ResourceEngine::libresourceUsers = 0;
@@ -88,9 +90,11 @@ bool ResourceEngine::initialize()
resproto_set_handler(ResourceEngine::libresourceConnection, RESMSG_UNREGISTER, handleUnregisterMessage);
resproto_set_handler(ResourceEngine::libresourceConnection, RESMSG_GRANT, handleGrantMessage);
resproto_set_handler(ResourceEngine::libresourceConnection, RESMSG_ADVICE, handleAdviceMessage);
+ engineMap.insert(ResourceEngine::libresourceConnection, this);
}
else {
ResourceEngine::libresourceUsers += 1;
+ engineMap.insert(ResourceEngine::libresourceConnection, this);
}
qDebug("ResourceEngine (%u, %p) is now initialized. %d users",
@@ -277,7 +281,7 @@ bool ResourceEngine::disconnectFromManager()
bool ret = true;
if (libresourceSet != NULL) {
- ret = resconn_disconnect(libresourceSet, &resourceMessage, statusCallbackHandler) != 0;
+ ret = resconn_disconnect(libresourceSet, &resourceMessage, statusCallbackHandler)?true:false;
}
return ret;
}
@@ -561,15 +565,14 @@ static void connectionIsUp(resconn_t *connection)
{
qDebug("**************** %s() - locking....", __FUNCTION__);
QMutexLocker locker(&mutex);
- if (NULL == connection->dbus.rsets->userdata) {
- qDebug("IGNORING connectionIsUp");
- return;
- }
- ResourceEngine *resourceEngine;
- resourceEngine = reinterpret_cast<ResourceEngine *>(connection->dbus.rsets->userdata);
qDebug("connection is up");
- resourceEngine->handleConnectionIsUp(connection);
+
+ QList<ResourceEngine*> engines = engineMap.values(connection);
+ for (int i = 0; i < engines.size(); ++i) {
+ ResourceEngine *resourceEngine = engines.at(i);
+ resourceEngine->handleConnectionIsUp(connection);
+ }
}
void ResourceEngine::handleConnectionIsUp(resconn_t *connection)
diff --git a/libresourceqt/src/resource-set.cpp b/libresourceqt/src/resource-set.cpp
index 8ddb54b..babddfe 100644
--- a/libresourceqt/src/resource-set.cpp
+++ b/libresourceqt/src/resource-set.cpp
@@ -272,18 +272,40 @@ bool ResourceSet::alwaysGetReply()
void ResourceSet::connectedHandler()
{
qDebug("**************** ResourceSet::%s().... %d", __FUNCTION__, __LINE__);
- qDebug("Connected to manager!");
+ if (resourceEngine->isConnectedToManager()) {
+ qDebug("ResourceSet::%s() Connected to manager!", __FUNCTION__);
- if (pendingAudioProperties) {
- registerAudioProperties();
- }
- if (pendingUpdate) {
- resourceEngine->updateResources();
- pendingUpdate = false;
+ if (pendingAudioProperties) {
+ registerAudioProperties();
+ }
+ if (pendingUpdate) {
+ resourceEngine->updateResources();
+ pendingUpdate = false;
+ }
+ if (pendingAcquire) {
+ resourceEngine->acquireResources();
+ pendingAcquire = false;
+ }
}
- if (pendingAcquire) {
- resourceEngine->acquireResources();
- pendingAcquire = false;
+ else { // assuming reconnecting
+ qDebug("ResourceSet::%s() Reconnecting to manager...", __FUNCTION__);
+
+ // first check if we have any acquired resources
+ for (int i = 0; i < NumberOfTypes; i++) {
+ if (resourceSet[i] != NULL) {
+ if (resourceSet[i]->isGranted()) {
+ if (i == AudioPlaybackType) {
+ pendingAudioProperties = true;
+ qDebug("ResourceSet::%s() We have audio", __FUNCTION__);
+ }
+ qDebug("ResourceSet::%s() We have acquired resources. Re-acquire", __FUNCTION__);
+ pendingAcquire = true;
+ resourceSet[i]->unsetGranted();
+ }
+ }
+ }
+ // now reconnect
+ resourceEngine->connectToManager();
}
}