Commit 3788f25e authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

added a library-wide interface for doing dns cache pruning, and no longer

make the pruning at each name lookup, only in Curl_done().
parent 5b885210
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -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);

+3 −0
Original line number Diff line number Diff line
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -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);