diff --git a/CHANGES b/CHANGES index 0184671eeff2de5267dc770bb0738436e2fbebe0..b76538733aec2aa253eb36f37a489e3f315daf14 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,10 @@ Changelog +Kamil Dudka (24 Apr 2010) +- Fixed test536 in order to not fail with threaded DNS resolver and tweaked + comments in certain examples using curl_multi_fdset(). + Daniel Stenberg (21 Apr 2010) - The -O option caused curl to crash on windows and DOS due to the tool writing out of boundary memory. diff --git a/docs/examples/fopen.c b/docs/examples/fopen.c index e3814e6ab19c81a0293be6fc657390b5db65c42b..35e24b11f6826579384954a19eb44e2f51c4196f 100644 --- a/docs/examples/fopen.c +++ b/docs/examples/fopen.c @@ -131,7 +131,6 @@ fill_buffer(URL_FILE *file,int want,int waittime) fd_set fdread; fd_set fdwrite; fd_set fdexcep; - int maxfd; struct timeval timeout; int rc; @@ -144,6 +143,7 @@ fill_buffer(URL_FILE *file,int want,int waittime) /* attempt to fill buffer */ do { + int maxfd = -1; FD_ZERO(&fdread); FD_ZERO(&fdwrite); FD_ZERO(&fdexcep); @@ -156,8 +156,10 @@ fill_buffer(URL_FILE *file,int want,int waittime) curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); /* In a real-world program you OF COURSE check the return code of the - function calls, *and* you make sure that maxfd is bigger than -1 - so that the call to select() below makes sense! */ + function calls. On success, the value of maxfd is guaranteed to be + greater or equal than -1. We call select(maxfd + 1, ...), specially + in case of (maxfd == -1), we call select(0, ...), which is basically + equal to sleep. */ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); diff --git a/docs/examples/multi-app.c b/docs/examples/multi-app.c index a86dd0efdbc65ea92ef55c154d9b5de8286cb95f..38b50cd0d3e520ca0599921966c0ed082bbaf507 100644 --- a/docs/examples/multi-app.c +++ b/docs/examples/multi-app.c @@ -66,7 +66,7 @@ int main(int argc, char **argv) fd_set fdread; fd_set fdwrite; fd_set fdexcep; - int maxfd; + int maxfd = -1; FD_ZERO(&fdread); FD_ZERO(&fdwrite); @@ -80,8 +80,10 @@ int main(int argc, char **argv) curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); /* In a real-world program you OF COURSE check the return code of the - function calls, *and* you make sure that maxfd is bigger than -1 so - that the call to select() below makes sense! */ + function calls. On success, the value of maxfd is guaranteed to be + greater or equal than -1. We call select(maxfd + 1, ...), specially in + case of (maxfd == -1), we call select(0, ...), which is basically equal + to sleep. */ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); diff --git a/docs/examples/multi-debugcallback.c b/docs/examples/multi-debugcallback.c index b10b47cd1eb0910118c08dcbfd5a3c83894b4ba8..8e964c67b115177e1446299b963bdba7ce91fab4 100644 --- a/docs/examples/multi-debugcallback.c +++ b/docs/examples/multi-debugcallback.c @@ -140,7 +140,7 @@ int main(int argc, char **argv) fd_set fdread; fd_set fdwrite; fd_set fdexcep; - int maxfd; + int maxfd = -1; FD_ZERO(&fdread); FD_ZERO(&fdwrite); @@ -154,8 +154,10 @@ int main(int argc, char **argv) curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); /* In a real-world program you OF COURSE check the return code of the - function calls, *and* you make sure that maxfd is bigger than -1 - so that the call to select() below makes sense! */ + function calls. On success, the value of maxfd is guaranteed to be + greater or equal than -1. We call select(maxfd + 1, ...), specially in + case of (maxfd == -1), we call select(0, ...), which is basically equal + to sleep. */ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); diff --git a/docs/examples/multi-double.c b/docs/examples/multi-double.c index ef3bf92fcb74a56dd107278a9c56d0ab056beadb..bc5b446eab0884fee85f3a06231dfb2c55789de1 100644 --- a/docs/examples/multi-double.c +++ b/docs/examples/multi-double.c @@ -57,7 +57,7 @@ int main(int argc, char **argv) fd_set fdread; fd_set fdwrite; fd_set fdexcep; - int maxfd; + int maxfd = -1; FD_ZERO(&fdread); FD_ZERO(&fdwrite); @@ -71,8 +71,10 @@ int main(int argc, char **argv) curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); /* In a real-world program you OF COURSE check the return code of the - function calls, *and* you make sure that maxfd is bigger than -1 so - that the call to select() below makes sense! */ + function calls. On success, the value of maxfd is guaranteed to be + greater or equal than -1. We call select(maxfd + 1, ...), specially in + case of (maxfd == -1), we call select(0, ...), which is basically equal + to sleep. */ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); diff --git a/docs/examples/multi-post.c b/docs/examples/multi-post.c index 229e84306f1315bcf7ff9469c598c5de9f870989..0d3f78e5e1fee6e2e69468aba2cb067858d1f0db 100644 --- a/docs/examples/multi-post.c +++ b/docs/examples/multi-post.c @@ -77,7 +77,7 @@ int main(int argc, char *argv[]) fd_set fdread; fd_set fdwrite; fd_set fdexcep; - int maxfd; + int maxfd = -1; FD_ZERO(&fdread); FD_ZERO(&fdwrite); @@ -91,8 +91,10 @@ int main(int argc, char *argv[]) curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); /* In a real-world program you OF COURSE check the return code of the - function calls, *and* you make sure that maxfd is bigger than -1 - so that the call to select() below makes sense! */ + function calls. On success, the value of maxfd is guaranteed to be + greater or equal than -1. We call select(maxfd + 1, ...), specially in + case of (maxfd == -1), we call select(0, ...), which is basically equal + to sleep. */ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); diff --git a/docs/examples/multi-single.c b/docs/examples/multi-single.c index 3e236f326c69bda58bb651562260a33f04541d09..cba4f32ccdc5b3aa738af941fce3c93f8d403163 100644 --- a/docs/examples/multi-single.c +++ b/docs/examples/multi-single.c @@ -51,7 +51,7 @@ int main(int argc, char **argv) fd_set fdread; fd_set fdwrite; fd_set fdexcep; - int maxfd; + int maxfd = -1; FD_ZERO(&fdread); FD_ZERO(&fdwrite); @@ -65,8 +65,10 @@ int main(int argc, char **argv) curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); /* In a real-world program you OF COURSE check the return code of the - function calls, *and* you make sure that maxfd is bigger than -1 so - that the call to select() below makes sense! */ + function calls. On success, the value of maxfd is guaranteed to be + greater or equal than -1. We call select(maxfd + 1, ...), specially in + case of (maxfd == -1), we call select(0, ...), which is basically equal + to sleep. */ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); diff --git a/tests/libtest/lib536.c b/tests/libtest/lib536.c index 04bc6965d3c7ee5cf4d8dba2a860d79cd9bd6d20..e0c19f661fec749a95e3243537d363de0128e334 100644 --- a/tests/libtest/lib536.c +++ b/tests/libtest/lib536.c @@ -21,7 +21,7 @@ static CURLMcode perform(CURLM * multi) { - int handles, maxfd; + int handles; CURLMcode code; fd_set fdread, fdwrite, fdexcep; struct timeval mp_start; @@ -31,6 +31,9 @@ static CURLMcode perform(CURLM * multi) mp_start = tutil_tvnow(); for (;;) { + static struct timeval timeout = /* 100 ms */ { 0, 100000L }; + int maxfd = -1; + code = curl_multi_perform(multi, &handles); if (tutil_tvdiff(tutil_tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { @@ -53,9 +56,14 @@ static CURLMcode perform(CURLM * multi) FD_ZERO(&fdwrite); FD_ZERO(&fdexcep); curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd); - if (maxfd < 0) - return (CURLMcode) ~CURLM_OK; - if (select(maxfd + 1, &fdread, &fdwrite, &fdexcep, 0) == -1) + + /* In a real-world program you OF COURSE check the return code of the + function calls. On success, the value of maxfd is guaranteed to be + greater or equal than -1. We call select(maxfd + 1, ...), specially in + case of (maxfd == -1), we call select(0, ...), which is basically equal + to sleep. */ + + if (select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout) == -1) return (CURLMcode) ~CURLM_OK; }