diff --git a/src/edge.c b/src/edge.c index 6aed0339..2d5ad705 100644 --- a/src/edge.c +++ b/src/edge.c @@ -83,23 +83,22 @@ void free_edge(edge_t *e) { } void edge_add(edge_t *e) { - splay_insert(edge_weight_tree, e); - if (!e->from) { - logger(DEBUG_ALWAYS, LOG_ERR, "edge_add(): e->from is NULL!"); - abort(); + if (!splay_insert(edge_weight_tree, e)) + logger(DEBUG_ALWAYS, LOG_ERR, + "%s:%d: edge from: %s to: %s exists in edge_weight_tree", + __FUNCTION__, __LINE__, e->from->name, e->to->name); + + if (splay_insert(e->from->edge_tree, e)) { + e->reverse = lookup_edge(e->to, e->from); + + if(e->reverse) { + if (e->reverse->reverse) { + logger(DEBUG_ALWAYS, LOG_ERR, "edge_add(): e->reverse->reverse should be NULL!"); + abort(); + } + e->reverse->reverse = e; + } } - - if (!e->to) { - logger(DEBUG_ALWAYS, LOG_ERR, "edge_add(): e->to is NULL!"); - abort(); - } - - splay_insert(e->from->edge_tree, e); - - e->reverse = lookup_edge(e->to, e->from); - - if(e->reverse) - e->reverse->reverse = e; } void edge_del(edge_t *e) {