From 3445fa2e3f28b359a3acd2a884f4e119b11e0a57 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 26 Aug 2011 11:10:58 +0200 Subject: [PATCH] tests: break busy loops in tests 502, 555, and 573 --- tests/libtest/lib502.c | 23 +++++++++++++++++++++-- tests/libtest/lib555.c | 23 +++++++++++++++++++++-- tests/libtest/lib573.c | 23 +++++++++++++++++++++-- 3 files changed, 63 insertions(+), 6 deletions(-) diff --git a/tests/libtest/lib502.c b/tests/libtest/lib502.c index 9ade12afb4..9040b2be32 100644 --- a/tests/libtest/lib502.c +++ b/tests/libtest/lib502.c @@ -73,6 +73,10 @@ int test(char *URL) mp_start = tutil_tvnow(); while (running) { + static struct timeval timeout = /* 100 ms */ { 0, 100000L }; + fd_set fdread, fdwrite, fdexcep; + int maxfd = -1; + res = (int)curl_multi_perform(m, &running); if (tutil_tvdiff(tutil_tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { @@ -83,11 +87,26 @@ int test(char *URL) fprintf(stderr, "nothing left running.\n"); break; } + + FD_ZERO(&fdread); + FD_ZERO(&fdwrite); + FD_ZERO(&fdexcep); + curl_multi_fdset(m, &fdread, &fdwrite, &fdexcep, &maxfd); + + /* 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) { + res = ~CURLM_OK; + break; + } } if (mp_timedout) { - if (mp_timedout) fprintf(stderr, "mp_timedout\n"); - fprintf(stderr, "ABORTING TEST, since it seems " + fprintf(stderr, "mp_timedout\nABORTING TEST, since it seems " "that it would have run forever.\n"); res = TEST_ERR_RUNS_FOREVER; } diff --git a/tests/libtest/lib555.c b/tests/libtest/lib555.c index c675015212..1e73a5a2ec 100644 --- a/tests/libtest/lib555.c +++ b/tests/libtest/lib555.c @@ -135,6 +135,10 @@ int test(char *URL) mp_start = tutil_tvnow(); while (running) { + static struct timeval timeout = /* 100 ms */ { 0, 100000L }; + fd_set fdread, fdwrite, fdexcep; + int maxfd = -1; + res = (int)curl_multi_perform(m, &running); if (tutil_tvdiff(tutil_tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { @@ -148,11 +152,26 @@ int test(char *URL) fprintf(stderr, "nothing left running.\n"); break; } + + FD_ZERO(&fdread); + FD_ZERO(&fdwrite); + FD_ZERO(&fdexcep); + curl_multi_fdset(m, &fdread, &fdwrite, &fdexcep, &maxfd); + + /* 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) { + res = ~CURLM_OK; + break; + } } if (mp_timedout) { - if (mp_timedout) fprintf(stderr, "mp_timedout\n"); - fprintf(stderr, "ABORTING TEST, since it seems " + fprintf(stderr, "mp_timedout\nABORTING TEST, since it seems " "that it would have run forever.\n"); res = TEST_ERR_RUNS_FOREVER; } diff --git a/tests/libtest/lib573.c b/tests/libtest/lib573.c index 4661858445..b5fafe16e4 100644 --- a/tests/libtest/lib573.c +++ b/tests/libtest/lib573.c @@ -76,6 +76,10 @@ int test(char *URL) mp_start = tutil_tvnow(); while (running) { + static struct timeval timeout = /* 100 ms */ { 0, 100000L }; + fd_set fdread, fdwrite, fdexcep; + int maxfd = -1; + res = (int)curl_multi_perform(m, &running); if (tutil_tvdiff(tutil_tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { @@ -86,11 +90,26 @@ int test(char *URL) fprintf(stderr, "nothing left running.\n"); break; } + + FD_ZERO(&fdread); + FD_ZERO(&fdwrite); + FD_ZERO(&fdexcep); + curl_multi_fdset(m, &fdread, &fdwrite, &fdexcep, &maxfd); + + /* 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) { + res = ~CURLM_OK; + break; + } } if (mp_timedout) { - if (mp_timedout) fprintf(stderr, "mp_timedout\n"); - fprintf(stderr, "ABORTING TEST, since it seems " + fprintf(stderr, "mp_timedout\nABORTING TEST, since it seems " "that it would have run forever.\n"); res = TEST_ERR_RUNS_FOREVER; }