From 384c8f356087178e4779d99d3e0e7f25331293aa Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Wed, 25 Oct 2006 05:59:46 +0000 Subject: Use curl_global_init() and curl_global_cleanup(). Improve cleanup in case of initialization failure. --- tests/libtest/lib504.c | 150 ++++++++++++++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 65 deletions(-) (limited to 'tests/libtest/lib504.c') diff --git a/tests/libtest/lib504.c b/tests/libtest/lib504.c index c6c09ea53..4a1931dd6 100644 --- a/tests/libtest/lib504.c +++ b/tests/libtest/lib504.c @@ -22,6 +22,7 @@ int test(char *URL) CURLM *m; fd_set rd, wr, exc; CURLMcode res; + char done = FALSE; int running; int max_fd; int rc; @@ -30,8 +31,16 @@ int test(char *URL) char ml_timedout = FALSE; char mp_timedout = FALSE; - curl_global_init(CURL_GLOBAL_ALL); - c = curl_easy_init(); + if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) { + fprintf(stderr, "curl_global_init() failed\n"); + return TEST_ERR_MAJOR_BAD; + } + + if ((c = curl_easy_init()) == NULL) { + fprintf(stderr, "curl_easy_init() failed\n"); + curl_global_cleanup(); + return TEST_ERR_MAJOR_BAD; + } /* the point here being that there must not run anything on the given proxy port */ @@ -39,88 +48,99 @@ int test(char *URL) curl_easy_setopt(c, CURLOPT_URL, URL); curl_easy_setopt(c, CURLOPT_VERBOSE, 1); - m = curl_multi_init(); + if ((m = curl_multi_init()) == NULL) { + fprintf(stderr, "curl_multi_init() failed\n"); + curl_easy_cleanup(c); + curl_global_cleanup(); + return TEST_ERR_MAJOR_BAD; + } - res = curl_multi_add_handle(m, c); - if(res && (res != CURLM_CALL_MULTI_PERFORM)) - ; /* major failure */ - else { + if ((res = (int)curl_multi_add_handle(m, c)) != CURLM_OK) { + fprintf(stderr, "curl_multi_add_handle() failed, " + "with code %d\n", res); + curl_multi_cleanup(m); + curl_easy_cleanup(c); + curl_global_cleanup(); + return TEST_ERR_MAJOR_BAD; + } - ml_timedout = FALSE; - ml_start = curlx_tvnow(); + ml_timedout = FALSE; + ml_start = curlx_tvnow(); - do { - struct timeval interval; + while (!done) { + struct timeval interval; - interval.tv_sec = 1; - interval.tv_usec = 0; + interval.tv_sec = 1; + interval.tv_usec = 0; - if (curlx_tvdiff(curlx_tvnow(), ml_start) > - MAIN_LOOP_HANG_TIMEOUT) { - ml_timedout = TRUE; - break; - } + if (curlx_tvdiff(curlx_tvnow(), ml_start) > + MAIN_LOOP_HANG_TIMEOUT) { + ml_timedout = TRUE; + break; + } + mp_timedout = FALSE; + mp_start = curlx_tvnow(); - fprintf(stderr, "curl_multi_perform()\n"); + fprintf(stderr, "curl_multi_perform()\n"); - mp_timedout = FALSE; - mp_start = curlx_tvnow(); + res = CURLM_CALL_MULTI_PERFORM; - do { - res = curl_multi_perform(m, &running); - 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 */ - int numleft; - CURLMsg *msg = curl_multi_info_read(m, &numleft); - fprintf(stderr, "Expected: not running\n"); - if(msg && !numleft) - ret = 100; /* this is where we should be */ - else - ret = 99; /* not correct */ + 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; } - fprintf(stderr, "running == %d, res == %d\n", running, res); + } + if (mp_timedout) + break; + + if(!running) { + /* This is where this code is expected to reach */ + int numleft; + CURLMsg *msg = curl_multi_info_read(m, &numleft); + fprintf(stderr, "Expected: not running\n"); + if(msg && !numleft) + ret = 100; /* this is where we should be */ + else + ret = 99; /* not correct */ + break; + } + fprintf(stderr, "running == %d, res == %d\n", running, res); - if (res != CURLM_OK) { - ret = 2; - break; - } + if (res != CURLM_OK) { + ret = 2; + break; + } - FD_ZERO(&rd); - FD_ZERO(&wr); - FD_ZERO(&exc); - max_fd = 0; + FD_ZERO(&rd); + FD_ZERO(&wr); + FD_ZERO(&exc); + max_fd = 0; - fprintf(stderr, "curl_multi_fdset()\n"); - if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) { - fprintf(stderr, "unexpected failured of fdset.\n"); - ret = 3; - break; - } - rc = select_test(max_fd+1, &rd, &wr, &exc, &interval); - fprintf(stderr, "select returned %d\n", rc); - - } 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; + fprintf(stderr, "curl_multi_fdset()\n"); + if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) { + fprintf(stderr, "unexpected failured of fdset.\n"); + ret = 3; + break; } + rc = select_test(max_fd+1, &rd, &wr, &exc, &interval); + fprintf(stderr, "select returned %d\n", rc); + } + + 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 = TEST_ERR_RUNS_FOREVER; } curl_multi_remove_handle(m, c); curl_easy_cleanup(c); curl_multi_cleanup(m); + curl_global_cleanup(); return ret; } -- cgit v1.2.3