]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
I made the torture test on test 530 go through. This was actually due to
authorDaniel Stenberg <daniel@haxx.se>
Tue, 15 Jan 2008 22:15:55 +0000 (22:15 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 15 Jan 2008 22:15:55 +0000 (22:15 +0000)
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.

CHANGES
docs/TODO
lib/hostip.c
lib/hostip.h
lib/url.c
lib/urldata.h

diff --git a/CHANGES b/CHANGES
index 560f1791b17ef7a768daefaef68a1a5d237d6512..ffbfdcf8d96d791107ca69f616de08ef8c0af0a4 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,12 @@
 
                                   Changelog
 
+Daniel S (15 Jan 2008)
+- 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.
+
 Daniel S (14 Jan 2008)
 - Joe Malicki filed bug report #1871269
   (http://curl.haxx.se/bug/view.cgi?id=1871269) and we could fix his hang-
index 17aedb620f38dafe984cd24a27ef208bcf462cd3..e5a3df6a39400e6c2a172dbe70736cbb2e7a14ce 100644 (file)
--- a/docs/TODO
+++ b/docs/TODO
  15.3 size_t
  15.4 remove several functions
  15.5 remove CURLOPT_FAILONERROR
+ 15.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
 
 ==============================================================================
 
@@ -563,3 +564,9 @@ to provide the data to send.
 
  Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
  internally. Let the app judge success or not for itself.
+
+15.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
+
+ Remove support for a global DNS cache. Anything global is silly, and we
+ already offer the share interface for the same functionality but done
+ "right".
index 55225480c3bb2a26b62de271041106adc4d9c0f1..aa5ec1e007f451bede19e11c0993f54a63cdc42d 100644 (file)
@@ -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;
 }
 
 /*
index 53093c169ba128ffe35e57dd14e2b2f7f07bbeb0..a7e0988a2a5cba465f639358acb63ebf0885b149 100644 (file)
@@ -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;
index a5e4565ad0bd8caae4ec35a6da614314498ffcfa..94c363fc2d23d6e47ebe81382f5488a55741c139 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -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:
index e9e4fb87265502558035be86f522b8ebfc9327b1..f3ca2f80d55cf50f4cd8bbdc0743aeb8b53c60bf 100644 (file)
@@ -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