Fix issue related with the use of ares_timeout() result.

This commit is contained in:
Yang Tse 2007-10-03 13:19:34 +00:00
parent 4bf28cb904
commit 3f3a38f9c6
3 changed files with 8 additions and 4 deletions

View File

@ -7,6 +7,8 @@
Changelog Changelog
Daniel S (3 October 2007) Daniel S (3 October 2007)
- Yang Tse, fix issue related with the use of ares_timeout() result.
- Alexey Pesternikov introduced CURLOPT_OPENSOCKETFUNCTION and - Alexey Pesternikov introduced CURLOPT_OPENSOCKETFUNCTION and
CURLOPT_OPENSOCKETDATA to set a callback that allows an application to CURLOPT_OPENSOCKETDATA to set a callback that allows an application to
replace the socket() call used by libcurl. It basically allows the app to replace the socket() call used by libcurl. It basically allows the app to

View File

@ -33,6 +33,7 @@ This release includes the following bugfixes:
o re-used handle transfers with SFTP o re-used handle transfers with SFTP
o curl_easy_escape() problem with byte values >= 128 o curl_easy_escape() problem with byte values >= 128
o handles chunked-encoded CONNECT responses o handles chunked-encoded CONNECT responses
o misuse of ares_timeout() result
This release includes the following known bugs: This release includes the following known bugs:

View File

@ -109,7 +109,8 @@ int Curl_resolv_getsock(struct connectdata *conn,
{ {
struct timeval maxtime; struct timeval maxtime;
struct timeval timeout; struct timeval timebuf;
struct timeval *timeout;
int max = ares_getsock(conn->data->state.areschannel, int max = ares_getsock(conn->data->state.areschannel,
(int *)socks, numsocks); (int *)socks, numsocks);
@ -117,10 +118,10 @@ int Curl_resolv_getsock(struct connectdata *conn,
maxtime.tv_sec = CURL_TIMEOUT_RESOLVE; maxtime.tv_sec = CURL_TIMEOUT_RESOLVE;
maxtime.tv_usec = 0; maxtime.tv_usec = 0;
ares_timeout(conn->data->state.areschannel, &maxtime, &timeout); timeout = ares_timeout(conn->data->state.areschannel, &maxtime, &timebuf);
Curl_expire(conn->data, Curl_expire(conn->data,
(timeout.tv_sec * 1000) + (timeout.tv_usec/1000) ); (timeout->tv_sec * 1000) + (timeout->tv_usec/1000));
return max; return max;
} }
@ -254,7 +255,7 @@ CURLcode Curl_wait_for_resolv(struct connectdata *conn,
tvp = ares_timeout(data->state.areschannel, &store, &tv); tvp = ares_timeout(data->state.areschannel, &store, &tv);
/* use the timeout period ares returned to us above */ /* use the timeout period ares returned to us above */
ares_waitperform(conn, tv.tv_sec * 1000 + tv.tv_usec/1000); ares_waitperform(conn, tvp->tv_sec * 1000 + tvp->tv_usec/1000);
if(conn->async.done) if(conn->async.done)
break; break;