Do not access e->to->prevedge if not defined
[tinc] / src / graph.c
index 70d6573..56ebb61 100644 (file)
@@ -173,7 +173,7 @@ static void sssp_bfs(void) {
 
                        if(e->to->status.visited
                           && (!e->to->status.indirect || indirect)
-                          && (e->to->distance != n->distance + 1 || e->weight >= e->to->prevedge->weight))
+                          && (e->to->prevedge && (e->to->distance != n->distance + 1 || e->weight >= e->to->prevedge->weight)))
                                continue;
 
                        // Only update nexthop if it doesn't increase the path length
@@ -238,10 +238,11 @@ static void check_reachability(void) {
 
                        n->status.udp_confirmed = false;
                        n->maxmtu = MTU;
+                       n->maxrecentlen = 0;
                        n->minmtu = 0;
                        n->mtuprobes = 0;
 
-                       timeout_del(&n->mtutimeout);
+                       timeout_del(&n->udp_ping_timeout);
 
                        char *name;
                        char *address;
@@ -275,6 +276,10 @@ static void check_reachability(void) {
                                update_node_udp(n, NULL);
                                memset(&n->status, 0, sizeof n->status);
                                n->options = 0;
+                       } else if(n->connection) {
+                               // Speed up UDP probing by sending our key.
+                               if(!n->status.sptps)
+                                       send_ans_key(n);
                        }
                }