X-Git-Url: http://www.tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fgraph.c;h=5b90c62578165b0872443eff1f21635334211ef4;hb=985d19caf20058db3c764f0f6fbeafa8bcc59fcc;hp=edea91bf0d11b6d6e0753ae9c4628faa8e7c559b;hpb=68f4ca711593416d0defd81199b176ba604c6cb1;p=tinc diff --git a/src/graph.c b/src/graph.c index edea91bf..5b90c625 100644 --- a/src/graph.c +++ b/src/graph.c @@ -1,6 +1,6 @@ /* graph.c -- graph algorithms - Copyright (C) 2001-2013 Guus Sliepen , + Copyright (C) 2001-2014 Guus Sliepen , 2001-2005 Ivo Timmermans This program is free software; you can redistribute it and/or modify @@ -212,9 +212,13 @@ static void sssp_bfs(void) { && (!e->to->status.indirect || indirect)) continue; + // Only update nexthop the first time we visit this node. + + if(!e->to->status.visited) + e->to->nexthop = (n->nexthop == myself) ? e->to : n->nexthop; + e->to->status.visited = true; e->to->status.indirect = indirect; - e->to->nexthop = (n->nexthop == myself) ? e->to : n->nexthop; e->to->prevedge = e; e->to->via = indirect ? n->via : e->to; e->to->options = e->options; @@ -289,7 +293,7 @@ static void sssp_bfs(void) { if(!n->status.reachable) { update_node_udp(n, NULL); - memset(&n->status, 0, sizeof n->status); + memset(&n->status, 0, sizeof(n->status)); n->options = 0; } else if(n->connection) { send_ans_key(n); @@ -336,6 +340,7 @@ void dump_graph(void) { if(!file) { logger(LOG_ERR, "Unable to open graph dump file %s: %s", filename, strerror(errno)); + free(filename); free(tmpname); return; } @@ -363,7 +368,10 @@ void dump_graph(void) { #ifdef HAVE_MINGW unlink(filename); #endif - rename(tmpname, filename); + if(rename(tmpname, filename)) + logger(LOG_ERR, "Could not rename %s to %s: %s\n", tmpname, filename, strerror(errno)); free(tmpname); } + + free(filename); }