diff options
author | Daniel Stenberg <daniel@haxx.se> | 2008-01-15 22:15:55 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2008-01-15 22:15:55 +0000 |
commit | 56f17d2c9f3d229d701bcf0dda83f4d29c0e02ba (patch) | |
tree | da73dc3c74a6b29c4c0894a15aa263a88a7fd31a /lib | |
parent | 19ae96f4d0086f45705a6d4e106e1f66ab03baf7 (diff) |
I made the torture test on test 530 go through. This was actually due to
silly code left from when we switched to let the multi handle "hold" the dns
cache when using the multi interface... Of course this only triggered when a
certain function call returned error at the correct moment.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/hostip.c | 15 | ||||
-rw-r--r-- | lib/hostip.h | 14 | ||||
-rw-r--r-- | lib/url.c | 16 | ||||
-rw-r--r-- | lib/urldata.h | 1 |
4 files changed, 29 insertions, 17 deletions
diff --git a/lib/hostip.c b/lib/hostip.c index 55225480c..aa5ec1e00 100644 --- a/lib/hostip.c +++ b/lib/hostip.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -127,14 +127,19 @@ static void freednsentry(void *freethis); * Curl_global_host_cache_init() initializes and sets up a global DNS cache. * Global DNS cache is general badness. Do not use. This will be removed in * a future version. Use the share interface instead! + * + * Returns 0 on success, 1 on failure. */ -void Curl_global_host_cache_init(void) +int Curl_global_host_cache_init(void) { + int rc = 0; if(!host_cache_initialized) { - Curl_hash_init(&hostname_cache, 7, Curl_hash_str, Curl_str_key_compare, - freednsentry); - host_cache_initialized = 1; + rc = Curl_hash_init(&hostname_cache, 7, Curl_hash_str, + Curl_str_key_compare, freednsentry); + if(!rc) + host_cache_initialized = 1; } + return rc; } /* diff --git a/lib/hostip.h b/lib/hostip.h index 53093c169..a7e0988a2 100644 --- a/lib/hostip.h +++ b/lib/hostip.h @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -125,11 +125,19 @@ struct hostent; struct SessionHandle; struct connectdata; -void Curl_global_host_cache_init(void); +/* + * Curl_global_host_cache_init() initializes and sets up a global DNS cache. + * Global DNS cache is general badness. Do not use. This will be removed in + * a future version. Use the share interface instead! + * + * Returns 0 on success, 1 on failure. + */ +int Curl_global_host_cache_init(void); void Curl_global_host_cache_dtor(void); struct curl_hash *Curl_global_host_cache_get(void); -#define Curl_global_host_cache_use(__p) ((__p)->set.global_dns_cache) +#define Curl_global_host_cache_use(__p) \ + ((__p)->dns.hostcachetype == HCACHE_GLOBAL) struct Curl_dns_entry { Curl_addrinfo *addr; @@ -457,11 +457,8 @@ CURLcode Curl_close(struct SessionHandle *data) return CURLE_OK; } - if( ! (data->share && data->share->hostcache) ) { - if( !Curl_global_host_cache_use(data)) { - Curl_hash_destroy(data->dns.hostcache); - } - } + if(data->dns.hostcachetype == HCACHE_PRIVATE) + Curl_hash_destroy(data->dns.hostcache); if(data->state.rangestringalloc) free(data->state.range); @@ -782,10 +779,13 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, case CURLOPT_DNS_USE_GLOBAL_CACHE: { long use_cache = va_arg(param, long); - if(use_cache) + if(use_cache) { Curl_global_host_cache_init(); - - data->set.global_dns_cache = (bool)(0 != use_cache); + data->dns.hostcachetype = HCACHE_GLOBAL; + } + else + /* not global makes it private by default then */ + data->dns.hostcachetype = HCACHE_PRIVATE; } break; case CURLOPT_SSL_CIPHER_LIST: diff --git a/lib/urldata.h b/lib/urldata.h index e9e4fb872..f3ca2f80d 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -1443,7 +1443,6 @@ struct UserDefined { curl_ftpauth ftpsslauth; /* what AUTH XXX to be attempted */ curl_ftpccc ftp_ccc; /* FTP CCC options */ bool no_signal; /* do not use any signal/alarm handler */ - bool global_dns_cache; /* subject for future removal */ bool tcp_nodelay; /* whether to enable TCP_NODELAY or not */ bool ignorecl; /* ignore content length */ bool ftp_skip_ip; /* skip the IP address the FTP server passes on to |