improved the cleaning up of memory when we fail to resolve names due to

out of memory (thanks to 'runtests.pl -t')
This commit is contained in:
Daniel Stenberg 2004-05-04 13:40:30 +00:00
Родитель 08d1da106e
Коммит 4250637e7d
2 изменённых файлов: 7 добавлений и 6 удалений

Просмотреть файл

@ -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 */
}

Просмотреть файл

@ -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 */