diff options
author | Yang Tse <yangsita@gmail.com> | 2007-01-31 15:34:53 +0000 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2007-01-31 15:34:53 +0000 |
commit | c2639e07388464dd920fe239358458e42658b278 (patch) | |
tree | 476e61f6763ffdbd700d1521e3cc78783847fde8 | |
parent | e485a23a3e24d6b8149bc87285ff46c6eee1266d (diff) |
when using select() instead of poll, skip the test if the number of
open file descriptors is greater than FD_SETSIZE minus SAFETY_MARGIN,
also skip the test if any of the open file descriptors has a number
greater than FD_SETSIZE minus SAFETY_MARGIN.
-rw-r--r-- | tests/libtest/lib518.c | 33 | ||||
-rw-r--r-- | tests/libtest/lib537.c | 41 |
2 files changed, 56 insertions, 18 deletions
diff --git a/tests/libtest/lib518.c b/tests/libtest/lib518.c index 47cea8244..368b902ae 100644 --- a/tests/libtest/lib518.c +++ b/tests/libtest/lib518.c @@ -360,16 +360,31 @@ static int rlimit(int keep_open) * with an indication that select limit would be exceeded. */ - sprintf(strbuff2, fmt, num_open.rlim_max); - sprintf(strbuff, "fds open %s > select limit %d", - strbuff2, FD_SETSIZE); - store_errmsg(strbuff, 0); - fprintf(stderr, "%s\n", msgbuff); - close_file_descriptors(); - free(memchunk); - return -10; + num_open.rlim_cur = FD_SETSIZE - SAFETY_MARGIN; + if (num_open.rlim_max > num_open.rlim_cur) { + sprintf(strbuff, "select limit is FD_SETSIZE %d", FD_SETSIZE); + store_errmsg(strbuff, 0); + fprintf(stderr, "%s\n", msgbuff); + close_file_descriptors(); + free(memchunk); + return -10; + } -#endif + num_open.rlim_cur = FD_SETSIZE - SAFETY_MARGIN; + for (rl.rlim_cur = 0; + rl.rlim_cur < num_open.rlim_max; + rl.rlim_cur++) { + if (fd[rl.rlim_cur] > num_open.rlim_cur) { + sprintf(strbuff, "select limit is FD_SETSIZE %d", FD_SETSIZE); + store_errmsg(strbuff, 0); + fprintf(stderr, "%s\n", msgbuff); + close_file_descriptors(); + free(memchunk); + return -11; + } + } + +#endif /* using a FD_SETSIZE bound select() */ /* free the chunk of memory we were reserving so that it becomes becomes available to the test */ diff --git a/tests/libtest/lib537.c b/tests/libtest/lib537.c index 6fd9c1097..fb2482083 100644 --- a/tests/libtest/lib537.c +++ b/tests/libtest/lib537.c @@ -26,6 +26,14 @@ #include <string.h> #endif +#if !defined(HAVE_POLL_FINE) && \ + !defined(CURL_HAVE_WSAPOLL) && \ + !defined(USE_WINSOCK) && \ + !defined(TPF) && \ + !defined(FD_SETSIZE) +#error "this test requires FD_SETSIZE" +#endif + #define SAFETY_MARGIN (10) #if defined(WIN32) || defined(_WIN32) || defined(MSDOS) @@ -356,16 +364,31 @@ static int rlimit(int keep_open) * with an indication that select limit would be exceeded. */ - sprintf(strbuff1, fmt, num_open.rlim_max); - sprintf(strbuff, "fds open %s > select limit %d", - strbuff1, FD_SETSIZE); - store_errmsg(strbuff, 0); - fprintf(stderr, "%s\n", msgbuff); - close_file_descriptors(); - free(memchunk); - return -8; + num_open.rlim_cur = FD_SETSIZE - SAFETY_MARGIN; + if (num_open.rlim_max > num_open.rlim_cur) { + sprintf(strbuff, "select limit is FD_SETSIZE %d", FD_SETSIZE); + store_errmsg(strbuff, 0); + fprintf(stderr, "%s\n", msgbuff); + close_file_descriptors(); + free(memchunk); + return -8; + } -#endif + num_open.rlim_cur = FD_SETSIZE - SAFETY_MARGIN; + for (rl.rlim_cur = 0; + rl.rlim_cur < num_open.rlim_max; + rl.rlim_cur++) { + if (fd[rl.rlim_cur] > num_open.rlim_cur) { + sprintf(strbuff, "select limit is FD_SETSIZE %d", FD_SETSIZE); + store_errmsg(strbuff, 0); + fprintf(stderr, "%s\n", msgbuff); + close_file_descriptors(); + free(memchunk); + return -9; + } + } + +#endif /* using a FD_SETSIZE bound select() */ /* free the chunk of memory we were reserving so that it becomes becomes available to the test */ |