From 223a40ec162252785591c2164f3ca1326d7878ea Mon Sep 17 00:00:00 2001 From: Wolf Bergenheim Date: Tue, 3 Aug 2010 15:55:54 +0300 Subject: Fixed bug NB#181713 --- libresourceqt/src/resource-engine.cpp | 19 +++++++++------- libresourceqt/src/resource-set.cpp | 42 ++++++++++++++++++++++++++--------- 2 files changed, 43 insertions(+), 18 deletions(-) (limited to 'libresourceqt') 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 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(connection->dbus.rsets->userdata); qDebug("connection is up"); - resourceEngine->handleConnectionIsUp(connection); + + QList 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(); } } -- cgit v1.2.3