X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet.c;h=59dd39b30c327b8f15f5deb6360148a043deb466;hp=7f1f77b38b192ea2e14db8b1a5afe300a6333371;hb=1bca167b7e24a9cb00ad6130c24f0bb60e208f1f;hpb=4c85542894f7fca823b119b05e07179deb24229a diff --git a/src/net.c b/src/net.c index 7f1f77b3..59dd39b3 100644 --- a/src/net.c +++ b/src/net.c @@ -2,6 +2,7 @@ net.c -- most of the network code Copyright (C) 1998-2005 Ivo Timmermans, 2000-2009 Guus Sliepen + 2006 Scott Lamb This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -430,7 +431,7 @@ int main_loop(void) { if(sighup) { connection_t *c; - avl_node_t *node; + avl_node_t *node, *next; char *fname; struct stat s; @@ -446,6 +447,31 @@ int main_loop(void) { return 1; } + /* Cancel non-active outgoing connections */ + + for(node = connection_tree->head; node; node = next) { + next = node->next; + c = node->data; + + c->outgoing = NULL; + + if(c->status.connecting) { + terminate_connection(c, false); + connection_del(c); + } + } + + /* Wipe list of outgoing connections */ + + for(list_node_t *node = outgoing_list->head; node; node = node->next) { + outgoing_t *outgoing = node->data; + + if(outgoing->event) + event_del(outgoing->event); + } + + list_delete_list(outgoing_list); + /* Close connections to hosts that have a changed or deleted host config file */ for(node = connection_tree->head; node; node = node->next) {