diff options
author | Goehring <Thomas.Goehring@continental-corporation.com> | 2013-06-12 16:09:22 +0200 |
---|---|---|
committer | Christian Linke <christian.linke@bmw.de> | 2013-06-18 17:23:56 +0200 |
commit | 9868e5f4ce0f3e0af021e48bdf8b6a22e6d1035d (patch) | |
tree | f8f2204a5dfbbf33cae81571680225b20fa6dc4f /AudioManagerDaemon/src/CAmDatabaseHandler.cpp | |
parent | 4549d18c1789fa3b3715598cc92631e2acb45ce1 (diff) | |
download | audiomanager-9868e5f4ce0f3e0af021e48bdf8b6a22e6d1035d.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/CAmDatabaseHandler.cpp')
-rw-r--r-- | AudioManagerDaemon/src/CAmDatabaseHandler.cpp | 14 |
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) |