From 87f43418668314b3bb5e57d46c47f4a05d3c4726 Mon Sep 17 00:00:00 2001 From: DennisOSRM Date: Thu, 22 Mar 2012 13:58:59 +0100 Subject: [PATCH] Fixes yesterdays crashes on the routing server where segfaults occured in a rare scenario with multiple via points. --- DataStructures/SearchEngine.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/DataStructures/SearchEngine.h b/DataStructures/SearchEngine.h index caac14d8b..2208f6932 100644 --- a/DataStructures/SearchEngine.h +++ b/DataStructures/SearchEngine.h @@ -254,6 +254,14 @@ public: packedPath1.insert(packedPath1.end(), temporaryPackedPath1.begin(), temporaryPackedPath1.end()); packedPath2.insert(packedPath2.end(), temporaryPackedPath2.begin(), temporaryPackedPath2.end()); + if( (packedPath1.back() == packedPath2.back()) && phantomNodePair.targetPhantom.isBidirected() ) { +// INFO("both paths end in same direction on bidirected edge, make sure start only start with : " << packedPath1.back()); + searchFrom1stStartNode ^= (packedPath1.back() != phantomNodePair.targetPhantom.edgeBasedNode); + searchFrom2ndStartNode ^= (packedPath1.back() != phantomNodePair.targetPhantom.edgeBasedNode+1); +// INFO("Next search from node " << phantomNodePair.targetPhantom.edgeBasedNode << ": " << (searchFrom1stStartNode ? "yes" : "no") ); +// INFO("Next search from node " << phantomNodePair.targetPhantom.edgeBasedNode+1 << ": " << (searchFrom2ndStartNode ? "yes" : "no") ); + } + distance1 += _localUpperbound1; distance2 += _localUpperbound2; }