diff options
author | Daniel Stenberg <daniel@haxx.se> | 2002-11-11 22:36:00 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2002-11-11 22:36:00 +0000 |
commit | 66eb98bb0a3d171b91c77f8a536011f6b25c1adc (patch) | |
tree | dd753011a607a248f3fbfaf946ed8c9883203dfc | |
parent | 299546f5c0bd1b8ba5a463efd6f087974ae4633a (diff) |
unlock dns cache entries with a function call instead of a variable fiddle
-rw-r--r-- | lib/connect.c | 4 | ||||
-rw-r--r-- | lib/ftp.c | 5 | ||||
-rw-r--r-- | lib/hostip.h | 11 | ||||
-rw-r--r-- | lib/url.c | 4 |
4 files changed, 18 insertions, 6 deletions
diff --git a/lib/connect.c b/lib/connect.c index b97c9da90..d2080c452 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -249,8 +249,8 @@ static CURLcode bindlocal(struct connectdata *conn, if ( h ) { Curl_addrinfo *addr = h->addr; - h->inuse--; /* decrease the use-counter, we don't need it anymore - after this function has returned */ + Curl_resolv_unlock(h); + /* we don't need it anymore after this function has returned */ memset((char *)&sa, 0, sizeof(sa)); #ifdef ENABLE_IPV6 @@ -1215,7 +1215,8 @@ CURLcode ftp_use_port(struct connectdata *conn) } if(h) - h->inuse--; /* when we return from here, we can forget about this */ + /* when we return from here, we can forget about this */ + Curl_resolv_unlock(h); if ( h || sa_filled_in) { if( (portsock = socket(AF_INET, SOCK_STREAM, 0)) >= 0 ) { @@ -1479,7 +1480,7 @@ CURLcode ftp_use_pasv(struct connectdata *conn, &conninfo, connected); - addr->inuse--; /* we're done using this address */ + Curl_resolv_unlock(addr); /* we're done using this address */ /* * When this is used from the multi interface, this might've returned with diff --git a/lib/hostip.h b/lib/hostip.h index 2593bc343..78a17e2e8 100644 --- a/lib/hostip.h +++ b/lib/hostip.h @@ -46,10 +46,21 @@ struct Curl_dns_entry { #endif }; +/* + * Curl_resolv() returns an entry with the info for the specified host + * and port. + * + * The returned data *MUST* be "unlocked" with Curl_resolv_unlock() after + * use, or we'll leak memory! + */ + struct Curl_dns_entry *Curl_resolv(struct SessionHandle *data, char *hostname, int port); +/* unlock a previously resolved dns entry */ +#define Curl_resolv_unlock(dns) dns->inuse-- + /* for debugging purposes only: */ void Curl_scan_cache_used(void *user, void *ptr); @@ -1500,7 +1500,7 @@ static int handleSock5Proxy( socksreq[6] = ((char*)hp->h_addr_list[0])[2]; socksreq[7] = ((char*)hp->h_addr_list[0])[3]; - dns->inuse--; /* not used anymore from now on */ + Curl_resolv_unlock(dns); /* not used anymore from now on */ } else { failf(conn->data, "Failed to resolve \"%s\" for SOCKS5 connect.", @@ -2852,7 +2852,7 @@ CURLcode Curl_done(struct connectdata *conn) } if(conn->connect_addr) - conn->connect_addr->inuse--; /* done with this */ + Curl_resolv_unlock(conn->connect_addr); /* done with this */ #ifdef MALLOCDEBUG /* scan for DNS cache entries still marked as in use */ |