aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2003-12-15 17:33:49 +0000
committerDaniel Stenberg <daniel@haxx.se>2003-12-15 17:33:49 +0000
commit3788f25eacbf4fcf20b04f1e74ea735b8b9b1396 (patch)
tree285ba121e95cd3e9d3c7fee096cc1246383c02f1
parent5b8852107b8a157024bef586f6d66f27efff26fc (diff)
added a library-wide interface for doing dns cache pruning, and no longer
make the pruning at each name lookup, only in Curl_done().
-rw-r--r--lib/hostip.c23
-rw-r--r--lib/hostip.h3
-rw-r--r--lib/url.c2
3 files changed, 22 insertions, 6 deletions
diff --git a/lib/hostip.c b/lib/hostip.c
index f2fa350d0..bc0db1925 100644
--- a/lib/hostip.c
+++ b/lib/hostip.c
@@ -195,6 +195,23 @@ hostcache_prune(curl_hash *hostcache, int cache_timeout, int now)
hostcache_timestamp_remove);
}
+void Curl_hostcache_prune(struct SessionHandle *data)
+{
+ time_t now;
+ if(data->share)
+ Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
+
+ time(&now);
+
+ /* Remove outdated and unused entries from the hostcache */
+ hostcache_prune(data->hostcache,
+ data->set.dns_cache_timeout,
+ now);
+
+ if(data->share)
+ Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
+}
+
#ifdef HAVE_SIGSETJMP
/* Beware this is a global and unique instance */
sigjmp_buf curl_jmpenv;
@@ -249,12 +266,6 @@ cache_resolv_response(struct SessionHandle *data,
dns->timestamp = now; /* used now */
dns->inuse++; /* mark entry as in-use */
-
- /* Remove outdated and unused entries from the hostcache */
- hostcache_prune(data->hostcache,
- data->set.dns_cache_timeout,
- now);
-
/* free the allocated entry_id again */
free(entry_id);
diff --git a/lib/hostip.h b/lib/hostip.h
index f902b5c64..c033bc25a 100644
--- a/lib/hostip.h
+++ b/lib/hostip.h
@@ -77,6 +77,9 @@ void Curl_freeaddrinfo(Curl_addrinfo *freeaddr);
/* free cached name info */
void Curl_freednsinfo(void *freethis);
+/* prune old entries from the DNS cache */
+void Curl_hostcache_prune(struct SessionHandle *data);
+
#ifdef CURLDEBUG
void curl_freeaddrinfo(struct addrinfo *freethis,
int line, const char *source);
diff --git a/lib/url.c b/lib/url.c
index d21cab247..417121cb3 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -3227,6 +3227,8 @@ CURLcode Curl_done(struct connectdata *conn)
NULL, Curl_scan_cache_used);
#endif
+ Curl_hostcache_prune(data); /* kill old DNS cache entries */
+
/* this calls the protocol-specific function pointer previously set */
if(conn->curl_done)
result = conn->curl_done(conn);