Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ba095c8566 | |||
| c1fd02bb8d | |||
| 54d02fac15 |
@@ -1,3 +1,13 @@
|
|||||||
|
# 5.16.6
|
||||||
|
- Changes from 5.16.5:
|
||||||
|
- Bugfixes:
|
||||||
|
- FIXED: integer overflow in `DynamicGraph::Renumber` [#5021](https://github.com/Project-OSRM/osrm-backend/pull/5021)
|
||||||
|
|
||||||
|
# 5.16.5
|
||||||
|
- Changes from 5.16.4:
|
||||||
|
- Debug:
|
||||||
|
- ADDED: Made toEdges allocation more robust and add better memory usage debugging.
|
||||||
|
|
||||||
# 5.16.4
|
# 5.16.4
|
||||||
- Changes from 5.16.3:
|
- Changes from 5.16.3:
|
||||||
- Bugfixes:
|
- Bugfixes:
|
||||||
|
|||||||
+1
-1
@@ -61,7 +61,7 @@ endif()
|
|||||||
project(OSRM C CXX)
|
project(OSRM C CXX)
|
||||||
set(OSRM_VERSION_MAJOR 5)
|
set(OSRM_VERSION_MAJOR 5)
|
||||||
set(OSRM_VERSION_MINOR 16)
|
set(OSRM_VERSION_MINOR 16)
|
||||||
set(OSRM_VERSION_PATCH 4)
|
set(OSRM_VERSION_PATCH 6)
|
||||||
set(OSRM_VERSION "${OSRM_VERSION_MAJOR}.${OSRM_VERSION_MINOR}.${OSRM_VERSION_PATCH}")
|
set(OSRM_VERSION "${OSRM_VERSION_MAJOR}.${OSRM_VERSION_MINOR}.${OSRM_VERSION_PATCH}")
|
||||||
|
|
||||||
add_definitions(-DOSRM_PROJECT_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
|
add_definitions(-DOSRM_PROJECT_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
|
|||||||
@@ -128,23 +128,24 @@ ContractorGraph toContractorGraph(NodeID number_of_nodes, InputEdgeContainer inp
|
|||||||
|
|
||||||
template <class Edge, typename GraphT> inline std::vector<Edge> toEdges(GraphT graph)
|
template <class Edge, typename GraphT> inline std::vector<Edge> toEdges(GraphT graph)
|
||||||
{
|
{
|
||||||
std::vector<Edge> edges;
|
util::Log() << "Converting contracted graph with " << graph.GetNumberOfEdges()
|
||||||
edges.reserve(graph.GetNumberOfEdges());
|
<< " to edge list (" << (graph.GetNumberOfEdges() * sizeof(Edge)) << " bytes)";
|
||||||
|
std::vector<Edge> edges(graph.GetNumberOfEdges());
|
||||||
|
|
||||||
|
{
|
||||||
util::UnbufferedLog log;
|
util::UnbufferedLog log;
|
||||||
log << "Getting edges of minimized graph ";
|
log << "Getting edges of minimized graph ";
|
||||||
util::Percent p(log, graph.GetNumberOfNodes());
|
util::Percent p(log, graph.GetNumberOfNodes());
|
||||||
const NodeID number_of_nodes = graph.GetNumberOfNodes();
|
const NodeID number_of_nodes = graph.GetNumberOfNodes();
|
||||||
if (graph.GetNumberOfNodes())
|
std::size_t edge_index = 0;
|
||||||
{
|
|
||||||
Edge new_edge;
|
|
||||||
for (const auto node : util::irange(0u, number_of_nodes))
|
for (const auto node : util::irange(0u, number_of_nodes))
|
||||||
{
|
{
|
||||||
p.PrintStatus(node);
|
p.PrintStatus(node);
|
||||||
for (auto edge : graph.GetAdjacentEdgeRange(node))
|
for (auto edge : graph.GetAdjacentEdgeRange(node))
|
||||||
{
|
{
|
||||||
const NodeID target = graph.GetTarget(edge);
|
const NodeID target = graph.GetTarget(edge);
|
||||||
const ContractorGraph::EdgeData &data = graph.GetEdgeData(edge);
|
const auto &data = graph.GetEdgeData(edge);
|
||||||
|
auto &new_edge = edges[edge_index++];
|
||||||
new_edge.source = node;
|
new_edge.source = node;
|
||||||
new_edge.target = target;
|
new_edge.target = target;
|
||||||
BOOST_ASSERT_MSG(SPECIAL_NODEID != new_edge.target, "Target id invalid");
|
BOOST_ASSERT_MSG(SPECIAL_NODEID != new_edge.target, "Target id invalid");
|
||||||
@@ -156,16 +157,12 @@ template <class Edge, typename GraphT> inline std::vector<Edge> toEdges(GraphT g
|
|||||||
"edge id invalid");
|
"edge id invalid");
|
||||||
new_edge.data.forward = data.forward;
|
new_edge.data.forward = data.forward;
|
||||||
new_edge.data.backward = data.backward;
|
new_edge.data.backward = data.backward;
|
||||||
edges.push_back(new_edge);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BOOST_ASSERT(edge_index == edges.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
// sort and remove duplicates
|
|
||||||
tbb::parallel_sort(edges.begin(), edges.end());
|
tbb::parallel_sort(edges.begin(), edges.end());
|
||||||
auto new_end = std::unique(edges.begin(), edges.end());
|
|
||||||
edges.resize(new_end - edges.begin());
|
|
||||||
edges.shrink_to_fit();
|
|
||||||
|
|
||||||
return edges;
|
return edges;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
#define DYNAMICGRAPH_HPP
|
#define DYNAMICGRAPH_HPP
|
||||||
|
|
||||||
#include "util/deallocating_vector.hpp"
|
#include "util/deallocating_vector.hpp"
|
||||||
|
#include "util/exception.hpp"
|
||||||
|
#include "util/exception_utils.hpp"
|
||||||
#include "util/integer_range.hpp"
|
#include "util/integer_range.hpp"
|
||||||
#include "util/permutation.hpp"
|
#include "util/permutation.hpp"
|
||||||
#include "util/typedefs.hpp"
|
#include "util/typedefs.hpp"
|
||||||
@@ -424,7 +426,7 @@ template <typename EdgeDataT> class DynamicGraph
|
|||||||
util::inplacePermutation(node_array.begin(), node_array.end(), old_to_new_node);
|
util::inplacePermutation(node_array.begin(), node_array.end(), old_to_new_node);
|
||||||
|
|
||||||
// Build up edge permutation
|
// Build up edge permutation
|
||||||
auto new_edge_index = 0;
|
EdgeID new_edge_index = 0;
|
||||||
std::vector<EdgeID> old_to_new_edge(edge_list.size(), SPECIAL_EDGEID);
|
std::vector<EdgeID> old_to_new_edge(edge_list.size(), SPECIAL_EDGEID);
|
||||||
for (auto node : util::irange<NodeID>(0, number_of_nodes))
|
for (auto node : util::irange<NodeID>(0, number_of_nodes))
|
||||||
{
|
{
|
||||||
@@ -432,6 +434,11 @@ template <typename EdgeDataT> class DynamicGraph
|
|||||||
// move all filled edges
|
// move all filled edges
|
||||||
for (auto edge : GetAdjacentEdgeRange(node))
|
for (auto edge : GetAdjacentEdgeRange(node))
|
||||||
{
|
{
|
||||||
|
if (new_edge_index == std::numeric_limits<EdgeID>::max())
|
||||||
|
{
|
||||||
|
throw util::exception("There are too many edges, OSRM only supports 2^32" +
|
||||||
|
SOURCE_REF);
|
||||||
|
}
|
||||||
edge_list[edge].target = old_to_new_node[edge_list[edge].target];
|
edge_list[edge].target = old_to_new_node[edge_list[edge].target];
|
||||||
BOOST_ASSERT(edge_list[edge].target != SPECIAL_NODEID);
|
BOOST_ASSERT(edge_list[edge].target != SPECIAL_NODEID);
|
||||||
old_to_new_edge[edge] = new_edge_index++;
|
old_to_new_edge[edge] = new_edge_index++;
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "osrm",
|
"name": "osrm",
|
||||||
"version": "5.16.4",
|
"version": "5.16.6",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.",
|
"description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
Reference in New Issue
Block a user