X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;ds=sidebyside;f=src%2Faddress_cache.c;h=df465da3a00df076a352433392b95f823e93687a;hb=8cacb36e31ca48e4ff9faa98d463893141068d3c;hp=2fa9baff5d73dfd950a0daf96fefae4c6e041661;hpb=89102b02047d0220766f55ec041c8fc46234cf69;p=tinc diff --git a/src/address_cache.c b/src/address_cache.c index 2fa9baff..df465da3 100644 --- a/src/address_cache.c +++ b/src/address_cache.c @@ -67,6 +67,7 @@ static struct addrinfo *get_known_addresses(node_t *n) { static void free_known_addresses(struct addrinfo *ai) { for(struct addrinfo *aip = ai, *next; aip; aip = next) { next = aip->ai_next; + free(aip->ai_addr); free(aip); } } @@ -108,7 +109,6 @@ void add_recent_address(address_cache_t *cache, const sockaddr_t *sa) { FILE *fp = fopen(fname, "wb"); if(fp) { - fprintf(stderr, "Writing cache to %s\n", fname); fwrite(&cache->data, sizeof(cache->data), 1, fp); fclose(fp); } @@ -129,12 +129,12 @@ const sockaddr_t *get_recent_address(address_cache_t *cache) { if(cache->ai) { if(cache->aip) { sockaddr_t *sa = (sockaddr_t *)cache->aip->ai_addr; + cache->aip = cache->aip->ai_next; if(find_cached(cache, sa) != NOT_CACHED) { continue; } - cache->aip = cache->aip->ai_next; return sa; } else { free_known_addresses(cache->ai); @@ -152,7 +152,7 @@ const sockaddr_t *get_recent_address(address_cache_t *cache) { cache->cfg = lookup_config(cache->config_tree, "Address"); } - while(cache->cfg && !cache->ai) { + while(cache->cfg && !cache->aip) { char *address, *port; get_config_string(cache->cfg, &address); @@ -168,6 +168,10 @@ const sockaddr_t *get_recent_address(address_cache_t *cache) { } } + if(cache->ai) { + free_known_addresses(cache->ai); + } + cache->aip = cache->ai = str2addrinfo(address, port, SOCK_STREAM); if(cache->ai) {