X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fedge.c;h=a19b9d3344575ab55d1c27dccc5d5f2e88e5907f;hb=8156f3760973c17256a93ab48016b8b84f5444de;hp=5491d8ac2885ad7f4a74fcde4fcbbf7496f4a626;hpb=f6e87ab476a0faf8b124ecaaa27f967d825e6457;p=tinc diff --git a/src/edge.c b/src/edge.c index 5491d8ac..a19b9d33 100644 --- a/src/edge.c +++ b/src/edge.c @@ -1,6 +1,6 @@ /* edge.c -- edge tree management - Copyright (C) 2000-2013 Guus Sliepen , + Copyright (C) 2000-2021 Guus Sliepen , 2000-2005 Ivo Timmermans This program is free software; you can redistribute it and/or modify @@ -26,7 +26,6 @@ #include "logger.h" #include "netutl.h" #include "node.h" -#include "utils.h" #include "xalloc.h" splay_tree_t *edge_weight_tree; @@ -83,14 +82,26 @@ void free_edge(edge_t *e) { } void edge_add(edge_t *e) { - splay_insert(edge_weight_tree, e); - splay_insert(e->from->edge_tree, e); + splay_node_t *node = splay_insert(e->from->edge_tree, e); + + if(!node) { + logger(DEBUG_ALWAYS, LOG_ERR, "Edge from %s to %s already exists in edge_tree\n", e->from->name, e->to->name); + return; + } + e->reverse = lookup_edge(e->to, e->from); if(e->reverse) { e->reverse->reverse = e; } + + node = splay_insert(edge_weight_tree, e); + + if(!node) { + logger(DEBUG_ALWAYS, LOG_ERR, "Edge from %s to %s already exists in edge_weight_tree\n", e->from->name, e->to->name); + return; + } } void edge_del(edge_t *e) {