Cleanup local_address in protocol_edge.c
[tinc] / src / edge.c
index b34fdc2..6539630 100644 (file)
@@ -1,6 +1,6 @@
 /*
     edge.c -- edge tree management
-    Copyright (C) 2000-2012 Guus Sliepen <guus@tinc-vpn.org>,
+    Copyright (C) 2000-2013 Guus Sliepen <guus@tinc-vpn.org>,
                   2000-2005 Ivo Timmermans
 
     This program is free software; you can redistribute it and/or modify
@@ -64,6 +64,12 @@ void free_edge_tree(splay_tree_t *edge_tree) {
 }
 
 void exit_edges(void) {
+       // since edge_weight_tree does not have delete action defined
+       // we have to cleanup it on exit
+       for splay_each(edge_t, e, edge_weight_tree) {
+                       sockaddrfree(&e->address);
+                       sockaddrfree(&e->local_address);
+               }
        splay_delete_tree(edge_weight_tree);
 }
 
@@ -110,11 +116,13 @@ bool dump_edges(connection_t *c) {
        for splay_each(node_t, n, node_tree) {
                for splay_each(edge_t, e, n->edge_tree) {
                        char *address = sockaddr2hostname(&e->address);
-                       send_request(c, "%d %d %s %s %s %x %d",
+                       char* local_address = sockaddr2hostname(&e->local_address);
+                       send_request(c, "%d %d %s %s %s %s %x %d",
                                        CONTROL, REQ_DUMP_EDGES,
                                        e->from->name, e->to->name, address,
-                                       e->options, e->weight);
+                                       local_address, e->options, e->weight);
                        free(address);
+                       free(local_address);
                }
        }