diff --git a/arangod/Cluster/ClusterTraverser.cpp b/arangod/Cluster/ClusterTraverser.cpp index 4b88fbfe60..3211e7bd26 100644 --- a/arangod/Cluster/ClusterTraverser.cpp +++ b/arangod/Cluster/ClusterTraverser.cpp @@ -181,7 +181,14 @@ void ClusterTraverser::EdgeGetter::operator() (std::string const& startVertex, if (_traverser->_vertices.find(toId) == _traverser->_vertices.end()) { verticesToFetch.emplace(toId); } - _traverser->_edges.emplace(edgeId, edge.copy().steal()); + std::unique_ptr copy(edge.copy().steal()); + if (copy != nullptr) { + if (_traverser->_edges.emplace(edgeId, copy.get()).second) { + // if insertion was successful, hand over the ownership + copy.release(); + } + // else we have a duplicate and we need to free the copy again + } } std::vector expVertices;