aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/libtest/lib504.c43
-rw-r--r--tests/libtest/lib507.c56
-rw-r--r--tests/libtest/lib509.c41
-rw-r--r--tests/libtest/lib525.c39
-rw-r--r--tests/libtest/lib526.c39
-rw-r--r--tests/libtest/lib530.c39
-rw-r--r--tests/libtest/lib533.c39
-rw-r--r--tests/libtest/lib536.c21
8 files changed, 253 insertions, 64 deletions
diff --git a/tests/libtest/lib504.c b/tests/libtest/lib504.c
index 8c5700dac..e925097ee 100644
--- a/tests/libtest/lib504.c
+++ b/tests/libtest/lib504.c
@@ -3,6 +3,11 @@
#include <sys/time.h>
#include <sys/types.h>
+#include "timeval.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 45 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 30 * 1000
+
/*
* Source code in here hugely as reported in bug report 651464 by
* Christopher R. Palmer.
@@ -20,8 +25,10 @@ int test(char *URL)
int running;
int max_fd;
int rc;
- int loop1 = 10;
- int loop2 = 20;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
curl_global_init(CURL_GLOBAL_ALL);
c = curl_easy_init();
@@ -38,19 +45,36 @@ int test(char *URL)
if(res && (res != CURLM_CALL_MULTI_PERFORM))
; /* major failure */
else {
+
+ ml_timedout = FALSE;
+ ml_start = curlx_tvnow();
+
do {
struct timeval interval;
interval.tv_sec = 1;
interval.tv_usec = 0;
- loop2 = 20;
+
+ if (curlx_tvdiff(curlx_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
fprintf(stderr, "curl_multi_perform()\n");
+ mp_timedout = FALSE;
+ mp_start = curlx_tvnow();
+
do {
res = curl_multi_perform(m, &running);
- } while ((--loop2>0) && (res == CURLM_CALL_MULTI_PERFORM));
- if (loop2 <= 0)
+ if (curlx_tvdiff(curlx_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ } while (res == CURLM_CALL_MULTI_PERFORM);
+ if (mp_timedout)
break;
if(!running) {
/* This is where this code is expected to reach */
@@ -84,11 +108,10 @@ int test(char *URL)
rc = select_test(max_fd+1, &rd, &wr, &exc, &interval);
fprintf(stderr, "select returned %d\n", rc);
- /* we only allow a certain number of loops to avoid hanging here
- forever */
- } while(--loop1>0);
- if ((loop1 <= 0) || (loop2 <= 0)) {
- fprintf(stderr, "loop1: %d loop2: %d \n", loop1, loop2);
+ } while(1);
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
fprintf(stderr, "ABORTING TEST, since it seems "
"that it would have run forever.\n");
ret = 77;
diff --git a/tests/libtest/lib507.c b/tests/libtest/lib507.c
index 9a98da728..b06d65fe2 100644
--- a/tests/libtest/lib507.c
+++ b/tests/libtest/lib507.c
@@ -1,5 +1,10 @@
#include "test.h"
+#include "timeval.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 45 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 30 * 1000
+
int test(char *URL)
{
CURL* curls;
@@ -7,8 +12,11 @@ int test(char *URL)
int still_running;
int i = -1;
CURLMsg *msg;
- int loop1 = 20;
- int loop2 = 40;
+ CURLMcode res;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
multi = curl_multi_init();
@@ -16,21 +24,41 @@ int test(char *URL)
curl_easy_setopt(curls, CURLOPT_URL, URL);
curl_multi_add_handle(multi, curls);
- while ((--loop1>0) && (CURLM_CALL_MULTI_PERFORM ==
- curl_multi_perform(multi, &still_running)));
+ mp_timedout = FALSE;
+ mp_start = curlx_tvnow();
+
+ do {
+ res = curl_multi_perform(multi, &still_running);
+ if (curlx_tvdiff(curlx_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ } while (res == CURLM_CALL_MULTI_PERFORM);
+
+ ml_timedout = FALSE;
+ ml_start = curlx_tvnow();
- while ((loop1>0) && (--loop2>0) && (still_running)) {
+ while ((!ml_timedout) && (!mp_timedout) && (still_running)) {
struct timeval timeout;
int rc;
fd_set fdread;
fd_set fdwrite;
fd_set fdexcep;
int maxfd;
+
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_ZERO(&fdexcep);
timeout.tv_sec = 1;
timeout.tv_usec = 0;
+
+ if (curlx_tvdiff(curlx_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+
curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd);
rc = select_test(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
switch(rc) {
@@ -38,14 +66,22 @@ int test(char *URL)
break;
case 0:
default:
- loop1 = 20;
- while ((--loop1>0) && (CURLM_CALL_MULTI_PERFORM ==
- curl_multi_perform(multi, &still_running)));
+ mp_timedout = FALSE;
+ mp_start = curlx_tvnow();
+ do {
+ res = curl_multi_perform(multi, &still_running);
+ if (curlx_tvdiff(curlx_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ } while (res == CURLM_CALL_MULTI_PERFORM);
break;
}
}
- if ((loop1 <= 0) || (loop2 <= 0)) {
- fprintf(stderr, "loop1: %d loop2: %d \n", loop1, loop2);
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
fprintf(stderr, "ABORTING TEST, since it seems "
"that it would have run forever.\n");
i = 77;
diff --git a/tests/libtest/lib509.c b/tests/libtest/lib509.c
index 5d385c966..77d5e1c6b 100644
--- a/tests/libtest/lib509.c
+++ b/tests/libtest/lib509.c
@@ -18,6 +18,11 @@
#include <openssl/bio.h>
#include <openssl/ssl.h>
+#include "timeval.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 45 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 30 * 1000
+
int portnum; /* the HTTPS port number we use */
typedef struct sslctxparm_st {
@@ -175,8 +180,10 @@ int test(char *URL)
int i = 0;
CURLMsg *msg;
- int loop1 = 40;
- int loop2 = 20;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
if(arg2) {
portnum = atoi(arg2);
@@ -208,24 +215,39 @@ int test(char *URL)
res = curl_multi_add_handle(multi, p.curl);
- while ((--loop1>0) && (loop2>0) && (!done)) {
+ ml_timedout = FALSE;
+ ml_start = curlx_tvnow();
+
+ while (!done) {
fd_set rd, wr, exc;
int max_fd;
struct timeval interval;
interval.tv_sec = 1;
interval.tv_usec = 0;
- loop2 = 20;
- while ((--loop2>0) && (res == CURLM_CALL_MULTI_PERFORM)) {
+ if (curlx_tvdiff(curlx_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+ mp_timedout = FALSE;
+ mp_start = curlx_tvnow();
+
+ while (res == CURLM_CALL_MULTI_PERFORM) {
res = curl_multi_perform(multi, &running);
+ if (curlx_tvdiff(curlx_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
fprintf(stderr, "running=%d res=%d\n",running,res);
if (running <= 0) {
done = TRUE;
break;
}
}
- if ((loop2 <= 0) || (done))
+ if (mp_timedout || done)
break;
if (res != CURLM_OK) {
@@ -254,8 +276,9 @@ int test(char *URL)
res = CURLM_CALL_MULTI_PERFORM;
}
- if ((loop1 <= 0) || (loop2 <= 0)) {
- fprintf(stderr, "loop1: %d loop2: %d \n", loop1, loop2);
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
fprintf(stderr, "ABORTING TEST, since it seems "
"that it would have run forever.\n");
i = 77;
@@ -268,7 +291,7 @@ int test(char *URL)
}
}
- if ((loop1>0) && (loop2>0)) {
+ if ((!ml_timedout) && (!mp_timedout)) {
fprintf(stderr, "all done\n");
}
diff --git a/tests/libtest/lib525.c b/tests/libtest/lib525.c
index 35c504b97..7ed10dcb7 100644
--- a/tests/libtest/lib525.c
+++ b/tests/libtest/lib525.c
@@ -14,6 +14,11 @@
#include <sys/stat.h>
#include <fcntl.h>
+#include "timeval.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 45 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 30 * 1000
+
int test(char *URL)
{
int res = 0;
@@ -24,8 +29,10 @@ int test(char *URL)
int running;
char done=FALSE;
CURLM *m;
- int loop1 = 40;
- int loop2 = 20;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
if (!arg2) {
fprintf(stderr, "Usage: lib525 [url] [uploadfile]\n");
@@ -84,23 +91,38 @@ int test(char *URL)
res = (int)curl_multi_add_handle(m, curl);
- while ((--loop1>0) && (loop2>0) && (!done)) {
+ ml_timedout = FALSE;
+ ml_start = curlx_tvnow();
+
+ while (!done) {
fd_set rd, wr, exc;
int max_fd;
struct timeval interval;
interval.tv_sec = 1;
interval.tv_usec = 0;
- loop2 = 20;
- while ((--loop2>0) && (res == CURLM_CALL_MULTI_PERFORM)) {
+ if (curlx_tvdiff(curlx_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+ mp_timedout = FALSE;
+ mp_start = curlx_tvnow();
+
+ while (res == CURLM_CALL_MULTI_PERFORM) {
res = (int)curl_multi_perform(m, &running);
+ if (curlx_tvdiff(curlx_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
if (running <= 0) {
done = TRUE;
break;
}
}
- if ((loop2 <= 0) || (done))
+ if (mp_timedout || done)
break;
if (res != CURLM_OK) {
@@ -128,8 +150,9 @@ int test(char *URL)
res = CURLM_CALL_MULTI_PERFORM;
}
- if ((loop1 <= 0) || (loop2 <= 0)) {
- fprintf(stderr, "loop1: %d loop2: %d \n", loop1, loop2);
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
fprintf(stderr, "ABORTING TEST, since it seems "
"that it would have run forever.\n");
res = 77;
diff --git a/tests/libtest/lib526.c b/tests/libtest/lib526.c
index 91d9206e7..c09dbb7cd 100644
--- a/tests/libtest/lib526.c
+++ b/tests/libtest/lib526.c
@@ -33,6 +33,11 @@
#include <sys/stat.h>
#include <fcntl.h>
+#include "timeval.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 45 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 30 * 1000
+
#define NUM_HANDLES 4
int test(char *URL)
@@ -44,8 +49,10 @@ int test(char *URL)
CURLM *m;
int current=0;
int i;
- int loop1 = 40;
- int loop2 = 20;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
/* In windows, this will init the winsock stuff */
curl_global_init(CURL_GLOBAL_ALL);
@@ -67,19 +74,34 @@ int test(char *URL)
res = (int)curl_multi_add_handle(m, curl[current]);
+ ml_timedout = FALSE;
+ ml_start = curlx_tvnow();
+
fprintf(stderr, "Start at URL 0\n");
- while ((--loop1>0) && (loop2>0) && (!done)) {
+ while (!done) {
fd_set rd, wr, exc;
int max_fd;
struct timeval interval;
interval.tv_sec = 1;
interval.tv_usec = 0;
- loop2 = 20;
- while ((--loop2>0) && (res == CURLM_CALL_MULTI_PERFORM)) {
+ if (curlx_tvdiff(curlx_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+ mp_timedout = FALSE;
+ mp_start = curlx_tvnow();
+
+ while (res == CURLM_CALL_MULTI_PERFORM) {
res = (int)curl_multi_perform(m, &running);
+ if (curlx_tvdiff(curlx_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
if (running <= 0) {
#ifdef LIB527
/* NOTE: this code does not remove the handle from the multi handle
@@ -115,7 +137,7 @@ int test(char *URL)
break;
}
}
- if ((loop2 <= 0) || (done))
+ if (mp_timedout || done)
break;
if (res != CURLM_OK) {
@@ -143,8 +165,9 @@ int test(char *URL)
res = CURLM_CALL_MULTI_PERFORM;
}
- if ((loop1 <= 0) || (loop2 <= 0)) {
- fprintf(stderr, "loop1: %d loop2: %d \n", loop1, loop2);
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
fprintf(stderr, "ABORTING TEST, since it seems "
"that it would have run forever.\n");
res = 77;
diff --git a/tests/libtest/lib530.c b/tests/libtest/lib530.c
index e83edb20c..e68273c75 100644
--- a/tests/libtest/lib530.c
+++ b/tests/libtest/lib530.c
@@ -13,6 +13,11 @@
#include <sys/types.h>
#include <sys/stat.h>
+#include "timeval.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 45 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 30 * 1000
+
#define NUM_HANDLES 4
int test(char *URL)
@@ -23,8 +28,10 @@ int test(char *URL)
char done=FALSE;
CURLM *m;
int i;
- int loop1 = 40;
- int loop2 = 60;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
/* In windows, this will init the winsock stuff */
curl_global_init(CURL_GLOBAL_ALL);
@@ -51,25 +58,40 @@ int test(char *URL)
curl_multi_setopt(m, CURLMOPT_PIPELINING, 1);
+ ml_timedout = FALSE;
+ ml_start = curlx_tvnow();
+
fprintf(stderr, "Start at URL 0\n");
- while ((--loop1>0) && (loop2>0) && (!done)) {
+ while (!done) {
fd_set rd, wr, exc;
int max_fd;
struct timeval interval;
interval.tv_sec = 1;
interval.tv_usec = 0;
- loop2 = 60;
- while ((--loop2>0) && (res == CURLM_CALL_MULTI_PERFORM)) {
+ if (curlx_tvdiff(curlx_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+ mp_timedout = FALSE;
+ mp_start = curlx_tvnow();
+
+ while (res == CURLM_CALL_MULTI_PERFORM) {
res = (int)curl_multi_perform(m, &running);
+ if (curlx_tvdiff(curlx_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
if (running <= 0) {
done = TRUE; /* bail out */
break;
}
}
- if ((loop2 <= 0) || (done))
+ if (mp_timedout || done)
break;
if (res != CURLM_OK) {
@@ -97,8 +119,9 @@ int test(char *URL)
res = CURLM_CALL_MULTI_PERFORM;
}
- if ((loop1 <= 0) || (loop2 <= 0)) {
- fprintf(stderr, "loop1: %d loop2: %d \n", loop1, loop2);
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
fprintf(stderr, "ABORTING TEST, since it seems "
"that it would have run forever.\n");
res = 77;
diff --git a/tests/libtest/lib533.c b/tests/libtest/lib533.c
index b0d63a10e..24c36d0d0 100644
--- a/tests/libtest/lib533.c
+++ b/tests/libtest/lib533.c
@@ -16,6 +16,11 @@
#include <sys/stat.h>
#include <fcntl.h>
+#include "timeval.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 45 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 30 * 1000
+
int test(char *URL)
{
int res = 0;
@@ -24,8 +29,10 @@ int test(char *URL)
char done=FALSE;
CURLM *m;
int current=0;
- int loop1 = 40;
- int loop2 = 20;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
/* In windows, this will init the winsock stuff */
curl_global_init(CURL_GLOBAL_ALL);
@@ -44,19 +51,34 @@ int test(char *URL)
res = (int)curl_multi_add_handle(m, curl);
+ ml_timedout = FALSE;
+ ml_start = curlx_tvnow();
+
fprintf(stderr, "Start at URL 0\n");
- while ((--loop1>0) && (loop2>0) && (!done)) {
+ while (!done) {
fd_set rd, wr, exc;
int max_fd;
struct timeval interval;
interval.tv_sec = 1;
interval.tv_usec = 0;
- loop2 = 20;
- while ((--loop2>0) && (res == CURLM_CALL_MULTI_PERFORM)) {
+ if (curlx_tvdiff(curlx_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+ mp_timedout = FALSE;
+ mp_start = curlx_tvnow();
+
+ while (res == CURLM_CALL_MULTI_PERFORM) {
res = (int)curl_multi_perform(m, &running);
+ if (curlx_tvdiff(curlx_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
if (running <= 0) {
if(!current++) {
fprintf(stderr, "Advancing to URL 1\n");
@@ -83,7 +105,7 @@ int test(char *URL)
break;
}
}
- if ((loop2 <= 0) || (done))
+ if (mp_timedout || done)
break;
if (res != CURLM_OK) {
@@ -111,8 +133,9 @@ int test(char *URL)
res = CURLM_CALL_MULTI_PERFORM;
}
- if ((loop1 <= 0) || (loop2 <= 0)) {
- fprintf(stderr, "loop1: %d loop2: %d \n", loop1, loop2);
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
fprintf(stderr, "ABORTING TEST, since it seems "
"that it would have run forever.\n");
res = 77;
diff --git a/tests/libtest/lib536.c b/tests/libtest/lib536.c
index 2e7874051..4181b829c 100644
--- a/tests/libtest/lib536.c
+++ b/tests/libtest/lib536.c
@@ -14,6 +14,11 @@
#include <sys/stat.h>
#include <fcntl.h>
+#include "timeval.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 45 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 30 * 1000
+
static CURLMcode perform(CURLM * multi);
static CURLMcode perform(CURLM * multi)
@@ -21,10 +26,19 @@ static CURLMcode perform(CURLM * multi)
int handles, maxfd;
CURLMcode code;
fd_set fdread, fdwrite, fdexcep;
- int loop;
+ struct timeval mp_start;
+ char mp_timedout = FALSE;
- for (loop=40;loop>0;loop--) {
+ mp_timedout = FALSE;
+ mp_start = curlx_tvnow();
+
+ for (;;) {
code = curl_multi_perform(multi, &handles);
+ if (curlx_tvdiff(curlx_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
if (handles <= 0)
return CURLM_OK;
@@ -47,7 +61,8 @@ static CURLMcode perform(CURLM * multi)
return (CURLMcode) ~CURLM_OK;
}
- /* We only reach this point if (loop <= 0) */
+ /* We only reach this point if (mp_timedout) */
+ fprintf(stderr, "mp_timedout\n");
fprintf(stderr, "ABORTING TEST, since it seems "
"that it would have run forever.\n");
return (CURLMcode) ~CURLM_OK;