From 648eed65328bb5f0b2e6678a3c78ca0d5f75fb45 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Thu, 9 Jan 2014 18:05:29 +0100 Subject: [PATCH] fix resource leak, performance issue, alternative route success rate. coverity issue 971431 --- RoutingAlgorithms/AlternativePathRouting.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/RoutingAlgorithms/AlternativePathRouting.h b/RoutingAlgorithms/AlternativePathRouting.h index dfb8cb349..80a410e1e 100644 --- a/RoutingAlgorithms/AlternativePathRouting.h +++ b/RoutingAlgorithms/AlternativePathRouting.h @@ -31,6 +31,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "BasicRoutingInterface.h" #include "../DataStructures/SearchEngineData.h" +#include #include #include #include @@ -213,12 +214,19 @@ public: approximated_reverse_sharing[v] = reverse_heap1.GetKey(u); } else { //sharing (s) = sharing (t) - approximated_reverse_sharing[v] = approximated_reverse_sharing[u]; + boost::unordered_map::const_iterator rev_iterator = approximated_reverse_sharing.find(u); + const int rev_sharing = (rev_iterator != approximated_reverse_sharing.end()) ? rev_iterator->second : 0; + approximated_reverse_sharing[v] = rev_sharing; } } std::vector nodes_that_passed_preselection; BOOST_FOREACH(const NodeID node, via_node_candidate_list) { - int approximated_sharing = approximated_forward_sharing[node] + approximated_reverse_sharing[node]; + boost::unordered_map::const_iterator fwd_iterator = approximated_forward_sharing.find(node); + const int fwd_sharing = (fwd_iterator != approximated_forward_sharing.end()) ? fwd_iterator->second : 0; + boost::unordered_map::const_iterator rev_iterator = approximated_reverse_sharing.find(node); + const int rev_sharing = (rev_iterator != approximated_reverse_sharing.end()) ? rev_iterator->second : 0; + + int approximated_sharing = fwd_sharing + rev_sharing; int approximated_length = forward_heap1.GetKey(node)+reverse_heap1.GetKey(node); bool lengthPassed = (approximated_length < upper_bound_to_shortest_path_distance*(1+VIAPATH_EPSILON)); bool sharingPassed = (approximated_sharing <= upper_bound_to_shortest_path_distance*VIAPATH_GAMMA);