Don't leave dead outgoing_t's in the outgoing_list.
authorGuus Sliepen <guus@tinc-vpn.org>
Tue, 24 Nov 2015 15:48:44 +0000 (16:48 +0100)
committerGuus Sliepen <guus@tinc-vpn.org>
Tue, 24 Nov 2015 15:48:44 +0000 (16:48 +0100)
If an outgoing connection cannot be made because no address is known for
it, it should be removed from the outgoing_list, otherwise it will
prevent it from being re-added later when we do know addresses for it.

src/net_socket.c

index 97d6c448265ce62a03c5707045897e6ce917c901..11b632026d89ac38d54ec2cf1b94ab64ce314a1a 100644 (file)
@@ -604,9 +604,12 @@ void setup_outgoing_connection(outgoing_t *outgoing) {
 
        if(n && n->connection) {
                logger(DEBUG_CONNECTIONS, LOG_INFO, "Already connected to %s", outgoing->name);
-
-               n->connection->outgoing = outgoing;
-               return;
+               if(!n->connection->outgoing) {
+                       n->connection->outgoing = outgoing;
+                       return;
+               } else {
+                       goto remove;
+               }
        }
 
        init_configuration(&outgoing->config_tree);
@@ -618,11 +621,16 @@ void setup_outgoing_connection(outgoing_t *outgoing) {
                        outgoing->aip = outgoing->ai = get_known_addresses(n);
                if(!outgoing->ai) {
                        logger(DEBUG_ALWAYS, LOG_DEBUG, "No address known for %s", outgoing->name);
-                       return;
+                       goto remove;
                }
        }
 
        do_outgoing_connection(outgoing);
+       return;
+
+remove:
+       list_delete(outgoing_list, outgoing);
+       free(outgoing);
 }
 
 /*