fixed Curl_freeaddrinfo() to only free addrinfo, and added Curl_freednsinfo()

for freeing single dns cache entries
This commit is contained in:
Daniel Stenberg 2002-11-26 09:41:54 +00:00
Родитель 2e71876b28
Коммит 7df5677b46
3 изменённых файлов: 21 добавлений и 10 удалений

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

@ -238,7 +238,7 @@ CURLcode curl_easy_perform(CURL *curl)
data->hostcache = Curl_global_host_cache_get(); data->hostcache = Curl_global_host_cache_get();
} }
else { else {
data->hostcache = Curl_hash_alloc(7, Curl_freeaddrinfo); data->hostcache = Curl_hash_alloc(7, Curl_freednsinfo);
} }
} }

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

@ -88,7 +88,7 @@ static Curl_addrinfo *my_getaddrinfo(struct SessionHandle *data,
void Curl_global_host_cache_init(void) void Curl_global_host_cache_init(void)
{ {
if (!host_cache_initialized) { if (!host_cache_initialized) {
Curl_hash_init(&hostname_cache, 7, Curl_freeaddrinfo); Curl_hash_init(&hostname_cache, 7, Curl_freednsinfo);
host_cache_initialized = 1; host_cache_initialized = 1;
} }
} }
@ -287,17 +287,25 @@ struct Curl_dns_entry *Curl_resolv(struct SessionHandle *data,
/* /*
* This is a wrapper function for freeing name information in a protocol * This is a wrapper function for freeing name information in a protocol
* independent way. This takes care of using the appropriate underlaying * independent way. This takes care of using the appropriate underlaying
* proper function. * function.
*/ */
void Curl_freeaddrinfo(void *freethis) void Curl_freeaddrinfo(Curl_addrinfo *p)
{
#ifdef ENABLE_IPV6
freeaddrinfo(p);
#else
free(p);
#endif
}
/*
* Free a cache dns entry.
*/
void Curl_freednsinfo(void *freethis)
{ {
struct Curl_dns_entry *p = (struct Curl_dns_entry *) freethis; struct Curl_dns_entry *p = (struct Curl_dns_entry *) freethis;
#ifdef ENABLE_IPV6 Curl_freeaddrinfo(p->addr);
freeaddrinfo(p->addr);
#else
free(p->addr);
#endif
free(p); free(p);
} }

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

@ -65,7 +65,10 @@ struct Curl_dns_entry *Curl_resolv(struct SessionHandle *data,
void Curl_scan_cache_used(void *user, void *ptr); void Curl_scan_cache_used(void *user, void *ptr);
/* free name info */ /* free name info */
void Curl_freeaddrinfo(void *freethis); void Curl_freeaddrinfo(Curl_addrinfo *freeaddr);
/* free cached name info */
void Curl_freednsinfo(void *freethis);
#ifdef MALLOCDEBUG #ifdef MALLOCDEBUG
void curl_freeaddrinfo(struct addrinfo *freethis, void curl_freeaddrinfo(struct addrinfo *freethis,