X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Faddress_cache.c;h=381ae785a1d3ff46b689cd4239b51ec4c887b339;hb=d2b03f006f98d504e3e30f2d4b91ce02abd19c51;hp=42b671b8990208c5d402f9f6005c1450cbc7b19e;hpb=e0f6d90e7fac4c567900e98c354af979c97f8d59;p=tinc diff --git a/src/address_cache.c b/src/address_cache.c index 42b671b8..381ae785 100644 --- a/src/address_cache.c +++ b/src/address_cache.c @@ -85,14 +85,16 @@ void add_recent_address(address_cache_t *cache, const sockaddr_t *sa) { unsigned int pos = find_cached(cache, sa); // It's in the first spot, so nothing to do - if (pos == 0) { + if(pos == 0) { return; } // Shift everything, move/add the address to the first slot if(pos == NOT_CACHED) { - if(cache->data.used < MAX_CACHED_ADDRESSES) + if(cache->data.used < MAX_CACHED_ADDRESSES) { cache->data.used++; + } + pos = cache->data.used - 1; } @@ -126,7 +128,7 @@ const sockaddr_t *get_recent_address(address_cache_t *cache) { if(cache->ai) { if(cache->aip) { - sockaddr_t *sa = (sockaddr_t *)cache->aip; + sockaddr_t *sa = (sockaddr_t *)cache->aip->ai_addr; if(find_cached(cache, sa) != NOT_CACHED) { continue; @@ -173,16 +175,16 @@ const sockaddr_t *get_recent_address(address_cache_t *cache) { cache->cfg = lookup_config_next(cache->config_tree, cache->cfg); } - if(cache->aip) { - sockaddr_t *sa = (sockaddr_t *)cache->aip->ai_addr; - cache->aip = cache->aip->ai_next; + if(cache->ai) { + if(cache->aip) { + sockaddr_t *sa = (sockaddr_t *)cache->aip->ai_addr; - if(!cache->aip) { + cache->aip = cache->aip->ai_next; + return sa; + } else { freeaddrinfo(cache->ai); - cache->ai = cache->aip = NULL; + cache->ai = NULL; } - - return sa; } // We're all out of addresses.