summaryrefslogtreecommitdiff
path: root/AudioManagerDaemon/src
diff options
context:
space:
mode:
authorGoehring <Thomas.Goehring@continental-corporation.com>2013-06-12 16:09:22 +0200
committerChristian Linke <christian.linke@bmw.de>2013-06-18 15:18:18 +0200
commit002071b5d483a7f3b1aea277463f56f24fd9d387 (patch)
treefb37fe4663fcd05fde103c8e520ccc38d0448f76 /AudioManagerDaemon/src
parent84c9f8a53a5c25e5585ada232aba2fa71a3426e6 (diff)
downloadaudiomanager-002071b5d483a7f3b1aea277463f56f24fd9d387.tar.gz
Thomas Göhring: Fix for: Bug 69 - Endless loop in CAmDatabaseHandler::getRoutingTree() on bidirectional gateway
Signed-off-by: Goehring <Thomas.Goehring@continental-corporation.com>
Diffstat (limited to 'AudioManagerDaemon/src')
-rw-r--r--AudioManagerDaemon/src/CAmDatabaseHandler.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/AudioManagerDaemon/src/CAmDatabaseHandler.cpp b/AudioManagerDaemon/src/CAmDatabaseHandler.cpp
index 0b592b5..40d3b34 100644
--- a/AudioManagerDaemon/src/CAmDatabaseHandler.cpp
+++ b/AudioManagerDaemon/src/CAmDatabaseHandler.cpp
@@ -4407,7 +4407,19 @@ am_Error_e CAmDatabaseHandler::getRoutingTree(bool onlyfree, CAmRoutingTree& tre
while ((eCode = sqlite3_step(query)) == SQLITE_ROW)
{
- flatTree.push_back(tree.insertItem(sqlite3_column_int(query, 0), sqlite3_column_int(query, 1), parent));
+ // additional check to avoid cyclic routes
+ const am_domainID_t domainSourceID = sqlite3_column_int(query, 0);
+ bool sourceDomainAlreadyHandledAsSink = false;
+ for (std::vector<CAmRoutingTreeItem*>::const_iterator iFT = flatTree.begin(); iFT != flatTree.end(); ++iFT)
+ {
+ if (domainSourceID == (*iFT)->returnParent()->returnDomainID()) sourceDomainAlreadyHandledAsSink = true;
+ }
+
+ if (!sourceDomainAlreadyHandledAsSink)
+ {
+ // logInfo("DatabaseHandler::getRoutingTree ", rootID, ", ", domainSourceID, ", ", sqlite3_column_int(query, 1));
+ flatTree.push_back(tree.insertItem(domainSourceID, sqlite3_column_int(query, 1), parent));
+ }
}
if (eCode != SQLITE_DONE)