diff options
| -rw-r--r-- | lib/hash.c | 2 | ||||
| -rw-r--r-- | lib/hostip.c | 11 | 
2 files changed, 7 insertions, 6 deletions
diff --git a/lib/hash.c b/lib/hash.c index 6769faacf..619f2fb1b 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -164,7 +164,7 @@ Curl_hash_add(curl_hash *h, char *key, size_t key_len, void *p)      /* couldn't insert it, destroy the 'he' element again */      hash_element_dtor(h, he);    } -  h->dtor(p); /* remove the NEW entry */ +    return NULL; /* failure */  } diff --git a/lib/hostip.c b/lib/hostip.c index 27f5e8a9a..4adcc1455 100644 --- a/lib/hostip.c +++ b/lib/hostip.c @@ -314,6 +314,7 @@ Curl_cache_addr(struct SessionHandle *data,    char *entry_id;    size_t entry_len;    struct Curl_dns_entry *dns; +  struct Curl_dns_entry *dns2;    time_t now;    /* Create an entry id, based upon the hostname and port */ @@ -325,7 +326,6 @@ Curl_cache_addr(struct SessionHandle *data,    /* Create a new cache entry */    dns = (struct Curl_dns_entry *) malloc(sizeof(struct Curl_dns_entry));    if (!dns) { -    Curl_freeaddrinfo(addr);      free(entry_id);      return NULL;    } @@ -336,14 +336,15 @@ Curl_cache_addr(struct SessionHandle *data,    /* Store the resolved data in our DNS cache. This function may return a       pointer to an existing struct already present in the hash, and it may       return the same argument we pass in. Make no assumptions. */ -  dns = Curl_hash_add(data->hostcache, entry_id, entry_len+1, (void *)dns); -  if(!dns) { -    /* Major badness, run away. When this happens, the 'dns' data has -       already been cleared up by Curl_hash_add(). */ +  dns2 = Curl_hash_add(data->hostcache, entry_id, entry_len+1, (void *)dns); +  if(!dns2) { +    /* Major badness, run away. */ +    free(dns);      free(entry_id);      return NULL;    }    time(&now); +  dns = dns2;    dns->timestamp = now; /* used now */    dns->inuse++;         /* mark entry as in-use */  | 
