]> granicus.if.org Git - curl/commitdiff
CURLOPT_DNS_USE_GLOBAL_CACHE: remove
authorDaniel Stenberg <daniel@haxx.se>
Thu, 7 Mar 2019 14:39:43 +0000 (15:39 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 11 Apr 2019 20:22:39 +0000 (22:22 +0200)
Remove the code too. The functionality has been disabled in code since
7.62.0. Setting this option will from now on simply be ignored and have
no function.

Closes #3654

docs/DEPRECATE.md
docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.3
lib/easy.c
lib/hostip.c
lib/multi.c
lib/setopt.c
lib/urldata.h
tests/unit/unit1607.c
tests/unit/unit1609.c

index 2ead9567e833c24b8ac33086346ddfdd2e2017d0..4f2570ade94fc80910c4978f38b492b20090d018 100644 (file)
@@ -5,26 +5,6 @@ email the curl-library mailing list as soon as possible and explain to us why
 this is a problem for you and how your use case can't be satisfied properly
 using a work around.
 
-## `CURLOPT_DNS_USE_GLOBAL_CACHE`
-
-This option makes libcurl use a global non-thread-safe cache for DNS if
-enabled. The option has been marked as "obsolete" in the header file and in
-documentation for several years already.
-
-There's proper and safe method alternative provided since many years: the
-share API.
-
-### State
-
-In curl 7.62.0 setting this option to TRUE will not have any effect. The
-global cache will not be enabled. The code still remains so it is easy to
-revert if need be.
-
-### Removal
-
-Remove all global-cache related code from curl around April 2019 (might be
-7.66.0).
-
 ## HTTP/0.9
 
 Supporting this is non-obvious and might even come as a surprise to some
index b23493b41d27ceac83e833d4928cdf00de597394..3638a62e4e53e51a1c0d681835cfb529d28e59e7 100644 (file)
@@ -5,7 +5,7 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2019, 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
@@ -29,6 +29,8 @@ CURLOPT_DNS_USE_GLOBAL_CACHE \- enable/disable global DNS cache
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_USE_GLOBAL_CACHE,
                           long enable);
 .SH DESCRIPTION
+Has no function since 7.62.0. Do note use!
+
 Pass a long. If the \fIenable\fP value is 1, it tells curl to use a global DNS
 cache that will survive between easy handle creations and deletions. This is
 not thread-safe and this will use a global variable.
@@ -53,7 +55,7 @@ if(curl) {
 }
 .fi
 .SH AVAILABILITY
-Subject for removal in the future. Do not use!
+Deprecated since 7.62.0. Has no function.
 .SH RETURN VALUE
 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
index ae6176f25b134743f1361fb364a1f16cca079adc..39482469c39a779b16ba801b4e9f590521298cdc 100644 (file)
@@ -265,7 +265,6 @@ void curl_global_cleanup(void)
   if(--initialized)
     return;
 
-  Curl_global_host_cache_dtor();
   Curl_ssl_cleanup();
   Curl_resolver_global_cleanup();
 
index 7909141c1788418d21c6eea8cbfd146c04a4500f..365d3c6618fe58d4f4aa8406c8536b46cefd431e 100644 (file)
  * CURLRES_* defines based on the config*.h and curl_setup.h defines.
  */
 
-/* These two symbols are for the global DNS cache */
-static struct curl_hash hostname_cache;
-static int host_cache_initialized;
-
 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 a struct curl_hash pointer on success, NULL on failure.
- */
-struct curl_hash *Curl_global_host_cache_init(void)
-{
-  int rc = 0;
-  if(!host_cache_initialized) {
-    rc = Curl_hash_init(&hostname_cache, 7, Curl_hash_str,
-                        Curl_str_key_compare, freednsentry);
-    if(!rc)
-      host_cache_initialized = 1;
-  }
-  return rc?NULL:&hostname_cache;
-}
-
-/*
- * Destroy and cleanup the global DNS cache
- */
-void Curl_global_host_cache_dtor(void)
-{
-  if(host_cache_initialized) {
-    Curl_hash_destroy(&hostname_cache);
-    host_cache_initialized = 0;
-  }
-}
-
 /*
  * Return # of addresses in a Curl_addrinfo struct
  */
index 500c24229c3840a817f5436ee9b3ad02e7433aeb..2ebc56255e420ad01a628bcd744ea44104026a4c 100644 (file)
@@ -402,19 +402,9 @@ CURLMcode curl_multi_add_handle(struct Curl_multi *multi,
   /* set the easy handle */
   multistate(data, CURLM_STATE_INIT);
 
-  if((data->set.global_dns_cache) &&
-     (data->dns.hostcachetype != HCACHE_GLOBAL)) {
-    /* global dns cache was requested but still isn't */
-    struct curl_hash *global = Curl_global_host_cache_init();
-    if(global) {
-      /* only do this if the global cache init works */
-      data->dns.hostcache = global;
-      data->dns.hostcachetype = HCACHE_GLOBAL;
-    }
-  }
   /* for multi interface connections, we share DNS cache automatically if the
      easy handle's one is currently not set. */
-  else if(!data->dns.hostcache ||
+  if(!data->dns.hostcache ||
      (data->dns.hostcachetype == HCACHE_NONE)) {
     data->dns.hostcache = &multi->hostcache;
     data->dns.hostcachetype = HCACHE_MULTI;
index b5f74a93dbe0cde11b9153c3dfe41df96ed0eb28..6e596fa667026ef1ac826953db670f82fc98ab2c 100644 (file)
@@ -128,11 +128,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
     data->set.dns_cache_timeout = arg;
     break;
   case CURLOPT_DNS_USE_GLOBAL_CACHE:
-#if 0 /* deprecated */
-    /* remember we want this enabled */
-    arg = va_arg(param, long);
-    data->set.global_dns_cache = (0 != arg) ? TRUE : FALSE;
-#endif
+    /* deprecated */
     break;
   case CURLOPT_SSL_CIPHER_LIST:
     /* set a list of cipher we want to use in the SSL connection */
index 6558112d3dae8047e8ed0389ed62220aea5b42e6..22a8e6dda06f76b726f55bce50f1bae9e19ebff8 100644 (file)
@@ -1691,7 +1691,6 @@ struct UserDefined {
   bit ftp_use_pret:1;   /* if PRET is to be used before PASV or not */
 
   bit no_signal:1;      /* do not use any signal/alarm handler */
-  bit global_dns_cache:1; /* subject for future removal */
   bit tcp_nodelay:1;    /* whether to enable TCP_NODELAY or not */
   bit ignorecl:1;       /* ignore content length */
   bit ftp_skip_ip:1;    /* skip the IP address the FTP server passes on to
@@ -1732,7 +1731,6 @@ struct Names {
   struct curl_hash *hostcache;
   enum {
     HCACHE_NONE,    /* not pointing to anything */
-    HCACHE_GLOBAL,  /* points to the (shrug) global one */
     HCACHE_MULTI,   /* points to a shared one in the multi handle */
     HCACHE_SHARED   /* points to a shared one in a shared object */
   } hostcachetype;
index 22c2e8482d24c08434733a768dfaed643a415040..6e40be7075b9e68edfa4901e351c0698e939226f 100644 (file)
@@ -31,12 +31,8 @@ bool getaddressinfo(struct sockaddr *sa, char *addr, long *port);
 
 #include "memdebug.h" /* LAST include file */
 
-static struct Curl_easy *easy;
-static struct curl_hash *hostcache;
-
 static void unit_stop(void)
 {
-  curl_easy_cleanup(easy);
   curl_global_cleanup();
 }
 
@@ -46,18 +42,6 @@ static CURLcode unit_setup(void)
 
   global_init(CURL_GLOBAL_ALL);
 
-  easy = curl_easy_init();
-  if(!easy) {
-    curl_global_cleanup();
-    return CURLE_OUT_OF_MEMORY;
-  }
-
-  hostcache = Curl_global_host_cache_init();
-  if(!hostcache) {
-    unit_stop();
-    return CURLE_OUT_OF_MEMORY;
-  }
-
   return res;
 }
 
@@ -122,7 +106,7 @@ UNITTEST_START
   int i;
   int testnum = sizeof(tests) / sizeof(struct testcase);
 
-  for(i = 0; i < testnum; ++i, curl_easy_reset(easy)) {
+  for(i = 0; i < testnum; ++i) {
     int j;
     int addressnum = sizeof(tests[i].address) / sizeof(*tests[i].address);
     struct Curl_addrinfo *addr;
@@ -130,10 +114,17 @@ UNITTEST_START
     struct curl_slist *list;
     void *entry_id;
     bool problem = false;
+    struct Curl_multi *multi;
+    struct Curl_easy *easy = curl_easy_init();
+    if(!easy) {
+      curl_global_cleanup();
+      return CURLE_OUT_OF_MEMORY;
+    }
 
-    Curl_hostcache_clean(easy, hostcache);
-    easy->dns.hostcache = hostcache;
-    easy->dns.hostcachetype = HCACHE_GLOBAL;
+    /* create a multi handle and add the easy handle to it so that the
+       hostcache is setup */
+    multi = curl_multi_init();
+    curl_multi_add_handle(multi, easy);
 
     list = curl_slist_append(NULL, tests[i].optval);
     if(!list)
@@ -214,7 +205,8 @@ UNITTEST_START
       addr = addr->ai_next;
     }
 
-    Curl_hostcache_clean(easy, easy->dns.hostcache);
+    curl_easy_cleanup(easy);
+    curl_multi_cleanup(multi);
     curl_slist_free_all(list);
 
     if(problem) {
index 865c9e4598924e81c310b38fc3ab153c5dc2b37d..8d9bc6526d45568bb42865539756c802f87bc81e 100644 (file)
@@ -31,12 +31,8 @@ bool getaddressinfo(struct sockaddr *sa, char *addr, long *port);
 
 #include "memdebug.h" /* LAST include file */
 
-static struct Curl_easy *easy;
-static struct curl_hash *hostcache;
-
 static void unit_stop(void)
 {
-  curl_easy_cleanup(easy);
   curl_global_cleanup();
 }
 
@@ -46,18 +42,6 @@ static CURLcode unit_setup(void)
 
   global_init(CURL_GLOBAL_ALL);
 
-  easy = curl_easy_init();
-  if(!easy) {
-    curl_global_cleanup();
-    return CURLE_OUT_OF_MEMORY;
-  }
-
-  hostcache = Curl_global_host_cache_init();
-  if(!hostcache) {
-    unit_stop();
-    return CURLE_OUT_OF_MEMORY;
-  }
-
   return res;
 }
 
@@ -117,17 +101,15 @@ static const struct testcase tests[] = {
 };
 
 UNITTEST_START
+{
   int i;
   int testnum = sizeof(tests) / sizeof(struct testcase);
 
 /* important: we setup cache outside of the loop
   and also clean cache after the loop. In contrast,for example,
   test 1607 sets up and cleans cache on each iteration. */
-  Curl_hostcache_clean(easy, hostcache);
-  easy->dns.hostcache = hostcache;
-  easy->dns.hostcachetype = HCACHE_GLOBAL;
 
-  for(i = 0; i < testnum; ++i, curl_easy_reset(easy)) {
+  for(i = 0; i < testnum; ++i) {
     int j;
     int addressnum = sizeof (tests[i].address) / sizeof (*tests[i].address);
     struct Curl_addrinfo *addr;
@@ -135,6 +117,16 @@ UNITTEST_START
     struct curl_slist *list;
     void *entry_id;
     bool problem = false;
+    struct Curl_multi *multi;
+    struct Curl_easy *easy = curl_easy_init();
+    if(!easy) {
+      curl_global_cleanup();
+      return CURLE_OUT_OF_MEMORY;
+    }
+    /* create a multi handle and add the easy handle to it so that the
+       hostcache is setup */
+    multi = curl_multi_init();
+    curl_multi_add_handle(multi, easy);
 
     list = curl_slist_append(NULL, tests[i].optval);
     if(!list)
@@ -205,6 +197,9 @@ UNITTEST_START
       addr = addr->ai_next;
     }
 
+    curl_easy_cleanup(easy);
+    Curl_hash_destroy(&multi->hostcache);
+    curl_multi_cleanup(multi);
     curl_slist_free_all(list);
 
     if(problem) {
@@ -212,7 +207,5 @@ UNITTEST_START
       continue;
     }
   }
-
-  Curl_hostcache_clean(easy, easy->dns.hostcache);
-
+}
 UNITTEST_STOP