diff --git a/CHANGES b/CHANGES index 803bf0f8513efa0ffc5593b3d82b71c5b022004a..ebda3001b514afd869027539c8f8a98fd83fef06 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,8 @@ Changelog Daniel S (3 October 2007) +- Yang Tse, fix issue related with the use of ares_timeout() result. + - Alexey Pesternikov introduced CURLOPT_OPENSOCKETFUNCTION and CURLOPT_OPENSOCKETDATA to set a callback that allows an application to replace the socket() call used by libcurl. It basically allows the app to diff --git a/RELEASE-NOTES b/RELEASE-NOTES index cfba051bcb139fa0c5453fa039cd72fec9ea129b..be84ebd331bb3f5cd470be894cc249eb752033bd 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -33,6 +33,7 @@ This release includes the following bugfixes: o re-used handle transfers with SFTP o curl_easy_escape() problem with byte values >= 128 o handles chunked-encoded CONNECT responses + o misuse of ares_timeout() result This release includes the following known bugs: diff --git a/lib/hostares.c b/lib/hostares.c index 4c49411ae51a2846ea707522997d2e59cf2c1dbe..81707ac7c8cf7c3ba13e8401e8f525c80d79d653 100644 --- a/lib/hostares.c +++ b/lib/hostares.c @@ -109,7 +109,8 @@ int Curl_resolv_getsock(struct connectdata *conn, { struct timeval maxtime; - struct timeval timeout; + struct timeval timebuf; + struct timeval *timeout; int max = ares_getsock(conn->data->state.areschannel, (int *)socks, numsocks); @@ -117,10 +118,10 @@ int Curl_resolv_getsock(struct connectdata *conn, maxtime.tv_sec = CURL_TIMEOUT_RESOLVE; 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, - (timeout.tv_sec * 1000) + (timeout.tv_usec/1000) ); + (timeout->tv_sec * 1000) + (timeout->tv_usec/1000)); return max; } @@ -254,7 +255,7 @@ CURLcode Curl_wait_for_resolv(struct connectdata *conn, tvp = ares_timeout(data->state.areschannel, &store, &tv); /* 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) break;