a819956d07
- upstream patch preventing SSL handshake timeout underflow
237 lines
8.8 KiB
Diff
237 lines
8.8 KiB
Diff
From d487ade72c5f31703ce097e8460e0225fad80348 Mon Sep 17 00:00:00 2001
|
|
From: Kamil Dudka <kdudka@redhat.com>
|
|
Date: Sat, 24 Apr 2010 12:14:21 +0200
|
|
Subject: [PATCH] test536: do not fail with threaded DNS resolver
|
|
|
|
Also tweaked comments in certain examples using curl_multi_fdset().
|
|
---
|
|
CHANGES | 4 ++++
|
|
docs/examples/fopen.c | 8 +++++---
|
|
docs/examples/multi-app.c | 8 +++++---
|
|
docs/examples/multi-debugcallback.c | 8 +++++---
|
|
docs/examples/multi-double.c | 8 +++++---
|
|
docs/examples/multi-post.c | 8 +++++---
|
|
docs/examples/multi-single.c | 8 +++++---
|
|
tests/libtest/lib536.c | 16 ++++++++++++----
|
|
8 files changed, 46 insertions(+), 22 deletions(-)
|
|
|
|
diff --git a/CHANGES b/CHANGES
|
|
index 9ae615a..99f04a5 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().
|
|
+
|
|
Version 7.20.1 (14 April 2010)
|
|
|
|
Daniel Stenberg (9 Apr 2010)
|
|
diff --git a/docs/examples/fopen.c b/docs/examples/fopen.c
|
|
index e3814e6..35e24b1 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 a86dd0e..38b50cd 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 b10b47c..8e964c6 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 ef3bf92..bc5b446 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 229e843..0d3f78e 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 3e236f3..cba4f32 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 04bc696..e0c19f6 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;
|
|
}
|
|
|