From 0714ac6c59099a398e67770ad9c72fcec615812b Mon Sep 17 00:00:00 2001
From: Guus Sliepen <guus@tinc-vpn.org>
Date: Sat, 11 Nov 2006 22:44:15 +0000
Subject: [PATCH] Nodes use events, so event system should be initialised first
 and destroyed last.

---
 src/event.c      |  2 +-
 src/net.c        |  2 +-
 src/net_packet.c |  2 +-
 src/net_setup.c  |  4 ++--
 src/node.c       | 16 +++++++++-------
 5 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/src/event.c b/src/event.c
index c58175a1..e7fbb882 100644
--- a/src/event.c
+++ b/src/event.c
@@ -96,7 +96,7 @@ event_t *get_expired_event(void)
 		event = event_tree->head->data;
 
 		if(event->time < now) {
-			avl_delete(event_tree, event);
+			event_del(event);
 			return event;
 		}
 	}
diff --git a/src/net.c b/src/net.c
index 81a0d894..e834f923 100644
--- a/src/net.c
+++ b/src/net.c
@@ -424,7 +424,7 @@ int main_loop(void)
 
 		while((event = get_expired_event())) {
 			event->handler(event->data);
-			free(event);
+			free_event(event);
 		}
 
 		if(sigalrm) {
diff --git a/src/net_packet.c b/src/net_packet.c
index ffda5a12..20bee349 100644
--- a/src/net_packet.c
+++ b/src/net_packet.c
@@ -101,7 +101,7 @@ void send_mtu_probe(node_t *n)
 		send_udppacket(n, &packet);
 	}
 
-	n->mtuevent = xmalloc(sizeof(*n->mtuevent));
+	n->mtuevent = new_event();
 	n->mtuevent->handler = (event_handler_t)send_mtu_probe;
 	n->mtuevent->data = n;
 	n->mtuevent->time = now + 1;
diff --git a/src/net_setup.c b/src/net_setup.c
index 4bac3f0b..ccd600b7 100644
--- a/src/net_setup.c
+++ b/src/net_setup.c
@@ -526,11 +526,11 @@ bool setup_network_connections(void)
 
 	now = time(NULL);
 
+	init_events();
 	init_connections();
 	init_subnets();
 	init_nodes();
 	init_edges();
-	init_events();
 	init_requests();
 
 	if(get_config_int(lookup_config(config_tree, "PingInterval"), &pinginterval)) {
@@ -594,11 +594,11 @@ void close_network_connections(void)
 	envp[4] = NULL;
 
 	exit_requests();
-	exit_events();
 	exit_edges();
 	exit_subnets();
 	exit_nodes();
 	exit_connections();
+	exit_events();
 
 	execute_script("tinc-down", envp);
 
diff --git a/src/node.c b/src/node.c
index 5cf5d967..5dad0aaf 100644
--- a/src/node.c
+++ b/src/node.c
@@ -93,12 +93,6 @@ void free_node(node_t *n)
 	if(n->queue)
 		list_delete_list(n->queue);
 
-	if(n->name)
-		free(n->name);
-
-	if(n->hostname)
-		free(n->hostname);
-
 	if(n->key)
 		free(n->key);
 
@@ -112,9 +106,17 @@ void free_node(node_t *n)
 
 	EVP_CIPHER_CTX_cleanup(&n->packet_ctx);
 
-	if(n->mtuevent)
+	if(n->mtuevent) {
 		event_del(n->mtuevent);
+		free_event(n->mtuevent);
+	}
 	
+	if(n->hostname)
+		free(n->hostname);
+
+	if(n->name)
+		free(n->name);
+
 	free(n);
 }
 
-- 
2.39.5