mirror of
https://github.com/curl/curl.git
synced 2024-11-21 01:16:58 +08:00
unlock dns cache entries with a function call instead of a variable fiddle
This commit is contained in:
parent
299546f5c0
commit
66eb98bb0a
@ -249,8 +249,8 @@ static CURLcode bindlocal(struct connectdata *conn,
|
|||||||
if ( h ) {
|
if ( h ) {
|
||||||
Curl_addrinfo *addr = h->addr;
|
Curl_addrinfo *addr = h->addr;
|
||||||
|
|
||||||
h->inuse--; /* decrease the use-counter, we don't need it anymore
|
Curl_resolv_unlock(h);
|
||||||
after this function has returned */
|
/* we don't need it anymore after this function has returned */
|
||||||
|
|
||||||
memset((char *)&sa, 0, sizeof(sa));
|
memset((char *)&sa, 0, sizeof(sa));
|
||||||
#ifdef ENABLE_IPV6
|
#ifdef ENABLE_IPV6
|
||||||
|
@ -1215,7 +1215,8 @@ CURLcode ftp_use_port(struct connectdata *conn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(h)
|
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 ( h || sa_filled_in) {
|
||||||
if( (portsock = socket(AF_INET, SOCK_STREAM, 0)) >= 0 ) {
|
if( (portsock = socket(AF_INET, SOCK_STREAM, 0)) >= 0 ) {
|
||||||
@ -1479,7 +1480,7 @@ CURLcode ftp_use_pasv(struct connectdata *conn,
|
|||||||
&conninfo,
|
&conninfo,
|
||||||
connected);
|
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
|
* When this is used from the multi interface, this might've returned with
|
||||||
|
11
lib/hostip.h
11
lib/hostip.h
@ -46,10 +46,21 @@ struct Curl_dns_entry {
|
|||||||
#endif
|
#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,
|
struct Curl_dns_entry *Curl_resolv(struct SessionHandle *data,
|
||||||
char *hostname,
|
char *hostname,
|
||||||
int port);
|
int port);
|
||||||
|
|
||||||
|
/* unlock a previously resolved dns entry */
|
||||||
|
#define Curl_resolv_unlock(dns) dns->inuse--
|
||||||
|
|
||||||
/* for debugging purposes only: */
|
/* for debugging purposes only: */
|
||||||
void Curl_scan_cache_used(void *user, void *ptr);
|
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[6] = ((char*)hp->h_addr_list[0])[2];
|
||||||
socksreq[7] = ((char*)hp->h_addr_list[0])[3];
|
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 {
|
else {
|
||||||
failf(conn->data, "Failed to resolve \"%s\" for SOCKS5 connect.",
|
failf(conn->data, "Failed to resolve \"%s\" for SOCKS5 connect.",
|
||||||
@ -2852,7 +2852,7 @@ CURLcode Curl_done(struct connectdata *conn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(conn->connect_addr)
|
if(conn->connect_addr)
|
||||||
conn->connect_addr->inuse--; /* done with this */
|
Curl_resolv_unlock(conn->connect_addr); /* done with this */
|
||||||
|
|
||||||
#ifdef MALLOCDEBUG
|
#ifdef MALLOCDEBUG
|
||||||
/* scan for DNS cache entries still marked as in use */
|
/* scan for DNS cache entries still marked as in use */
|
||||||
|
Loading…
Reference in New Issue
Block a user