Shmulik Regev provided a fix for the DNS cache when using short life times,
as previously it could be holding on to old cached entries longer than requested.
This commit is contained in:
parent
831bdb9f63
commit
92009181af
13
CHANGES
13
CHANGES
@ -6,11 +6,16 @@
|
|||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
|
Daniel (17 February 2006)
|
||||||
|
- Shmulik Regev provided a fix for the DNS cache when using short life times,
|
||||||
|
as previously it could be holding on to old cached entries longer than
|
||||||
|
requested.
|
||||||
|
|
||||||
Daniel (11 February 2006)
|
Daniel (11 February 2006)
|
||||||
- Karl M added the CURLOPT_CONNECT_ONLY and CURLINFO_LASTSOCKET options that
|
- Karl Moerder added the CURLOPT_CONNECT_ONLY and CURLINFO_LASTSOCKET options
|
||||||
an app can use to let libcurl only connect to a remote host and then extract
|
that an app can use to let libcurl only connect to a remote host and then
|
||||||
the socket from libcurl. libcurl will then not attempt to do any transfer at
|
extract the socket from libcurl. libcurl will then not attempt to do any
|
||||||
all after the connect is done.
|
transfer at all after the connect is done.
|
||||||
|
|
||||||
- Kent Boortz improved the configure check for GnuTLS to properly set LIBS
|
- Kent Boortz improved the configure check for GnuTLS to properly set LIBS
|
||||||
instead of LDFLAGS.
|
instead of LDFLAGS.
|
||||||
|
@ -21,6 +21,7 @@ This release includes the following changes:
|
|||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
|
o cached DNS entries could remain in the cache too long
|
||||||
o improved GnuTLS check in configure
|
o improved GnuTLS check in configure
|
||||||
o re-used FTP connections when the second request didn't do a transfer
|
o re-used FTP connections when the second request didn't do a transfer
|
||||||
o plain --limit-rate [num] means bytes
|
o plain --limit-rate [num] means bytes
|
||||||
@ -62,6 +63,6 @@ advice from friends like these:
|
|||||||
Dov Murik, Jean Jacques Drouin, Andres Garcia, Yang Tse, Gisle Vanem, Dan
|
Dov Murik, Jean Jacques Drouin, Andres Garcia, Yang Tse, Gisle Vanem, Dan
|
||||||
Fandrich, Alexander Lazic, Michael Jahn, Andrew Benham, Bryan Henderson,
|
Fandrich, Alexander Lazic, Michael Jahn, Andrew Benham, Bryan Henderson,
|
||||||
David Shaw, Jon Turner, Duane Cathey, Michal Marek, Philippe Vaucher, Kent
|
David Shaw, Jon Turner, Duane Cathey, Michal Marek, Philippe Vaucher, Kent
|
||||||
Boortz, Karl M
|
Boortz, Karl Moerder, Shmulik Regev
|
||||||
|
|
||||||
Thanks! (and sorry if I forgot to mention someone)
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
|
@ -3,6 +3,4 @@ To get fixed in 7.15.2 (planned release: Febrary 2006)
|
|||||||
|
|
||||||
63 - bug #1431750
|
63 - bug #1431750
|
||||||
|
|
||||||
64 - DNS caching set to 0, prune sooner
|
|
||||||
|
|
||||||
65 -
|
65 -
|
||||||
|
40
lib/hostip.c
40
lib/hostip.c
@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -276,6 +276,39 @@ void Curl_hostcache_prune(struct SessionHandle *data)
|
|||||||
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
|
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
remove_entry_if_stale(struct SessionHandle *data, struct Curl_dns_entry *dns)
|
||||||
|
{
|
||||||
|
struct hostcache_prune_data user;
|
||||||
|
|
||||||
|
if( !dns || (data->set.dns_cache_timeout == -1) || !data->hostcache)
|
||||||
|
/* cache forever means never prune, and NULL hostcache means
|
||||||
|
we can't do it */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
time(&user.now);
|
||||||
|
user.cache_timeout = data->set.dns_cache_timeout;
|
||||||
|
|
||||||
|
if ( !hostcache_timestamp_remove(&user,dns) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* ok, we do need to clear the cache. although we need to remove just a
|
||||||
|
single entry we clean the entire hash, as no explicit delete function
|
||||||
|
is provided */
|
||||||
|
if(data->share)
|
||||||
|
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
|
||||||
|
|
||||||
|
Curl_hash_clean_with_criterium(data->hostcache,
|
||||||
|
(void *) &user,
|
||||||
|
hostcache_timestamp_remove);
|
||||||
|
|
||||||
|
if(data->share)
|
||||||
|
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_SIGSETJMP
|
#ifdef HAVE_SIGSETJMP
|
||||||
/* Beware this is a global and unique instance. This is used to store the
|
/* Beware this is a global and unique instance. This is used to store the
|
||||||
return address that we can jump back to from inside a signal handler. This
|
return address that we can jump back to from inside a signal handler. This
|
||||||
@ -405,6 +438,11 @@ int Curl_resolv(struct connectdata *conn,
|
|||||||
/* free the allocated entry_id again */
|
/* free the allocated entry_id again */
|
||||||
free(entry_id);
|
free(entry_id);
|
||||||
|
|
||||||
|
/* See whether the returned entry is stale. Deliberately done after the
|
||||||
|
locked block */
|
||||||
|
if ( remove_entry_if_stale(data,dns) )
|
||||||
|
dns = NULL; /* the memory deallocation is being handled by the hash */
|
||||||
|
|
||||||
rc = CURLRESOLV_ERROR; /* default to failure */
|
rc = CURLRESOLV_ERROR; /* default to failure */
|
||||||
|
|
||||||
if (!dns) {
|
if (!dns) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user