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;
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);
/* 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);
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);