summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2006-11-03 10:05:21 +0000
committerYang Tse <yangsita@gmail.com>2006-11-03 10:05:21 +0000
commit78081a1652bce9877f464d97e9780f9e296e293b (patch)
treea4417292b35913b45a880d11efed9a0c67575984
parent7408976b158c56034c9e9d739acf41a6d462418e (diff)
downloadcurl-78081a1652bce9877f464d97e9780f9e296e293b.tar.gz
reduce max size of dinamically allocated arrays to minimize the nasty
behaviour some versions of IRIX exhibit of committing suicide on big mallocs instead of just returning a friendly null pointer
-rw-r--r--tests/libtest/lib518.c20
-rw-r--r--tests/libtest/lib537.c22
2 files changed, 35 insertions, 7 deletions
diff --git a/tests/libtest/lib518.c b/tests/libtest/lib518.c
index 4fc06dfb2..d91625f98 100644
--- a/tests/libtest/lib518.c
+++ b/tests/libtest/lib518.c
@@ -202,7 +202,7 @@ static int rlimit(int keep_open)
(rl.rlim_cur <= num_open.rlim_cur)) {
sprintf(strbuff2, fmt, rl.rlim_cur);
sprintf(strbuff1, fmt, num_open.rlim_cur);
- sprintf(strbuff, "fd needed (%s) > system limit (%s)",
+ sprintf(strbuff, "fds needed %s > system limit %s",
strbuff1, strbuff2);
store_errmsg(strbuff, 0);
fprintf(stderr, "%s\n", msgbuff);
@@ -218,11 +218,19 @@ static int rlimit(int keep_open)
* that it becomes available to the test.
*/
- nitems = INT_MAX / sizeof(*memchunk);
+ for (nitems = i = 1; nitems <= i; i *= 2)
+ nitems = i;
+ if (nitems > 0x7fff)
+ nitems = 0x40000;
do {
+ num_open.rlim_max = sizeof(*memchunk) * (size_t)nitems;
+ sprintf(strbuff, fmt, num_open.rlim_max);
+ fprintf(stderr, "allocating memchunk %s byte array\n", strbuff);
memchunk = malloc(sizeof(*memchunk) * (size_t)nitems);
- if (!memchunk)
+ if (!memchunk) {
+ fprintf(stderr, "memchunk, malloc() failed\n");
nitems /= 2;
+ }
} while (nitems && !memchunk);
if (!memchunk) {
store_errmsg("memchunk, malloc() failed", our_errno());
@@ -232,6 +240,8 @@ static int rlimit(int keep_open)
/* initialize it to fight lazy allocation */
+ fprintf(stderr, "initializing memchunk array\n");
+
for (i = 0; i < nitems; i++)
memchunk[i] = -1;
@@ -266,6 +276,8 @@ static int rlimit(int keep_open)
/* initialize it to fight lazy allocation */
+ fprintf(stderr, "initializing fd array\n");
+
for (num_open.rlim_cur = 0;
num_open.rlim_cur < num_open.rlim_max;
num_open.rlim_cur++)
@@ -302,7 +314,7 @@ static int rlimit(int keep_open)
num_open.rlim_max = NUM_NEEDED;
sprintf(strbuff2, fmt, num_open.rlim_max);
sprintf(strbuff1, fmt, num_open.rlim_cur);
- sprintf(strbuff, "fd needed (%s) > system limit (%s)",
+ sprintf(strbuff, "fds needed %s > system limit %s",
strbuff2, strbuff1);
store_errmsg(strbuff, 0);
fprintf(stderr, "%s\n", msgbuff);
diff --git a/tests/libtest/lib537.c b/tests/libtest/lib537.c
index c9c4dd4f1..08bf1209c 100644
--- a/tests/libtest/lib537.c
+++ b/tests/libtest/lib537.c
@@ -185,11 +185,19 @@ static int rlimit(int keep_open)
* that it becomes available to the test.
*/
- nitems = INT_MAX / sizeof(*memchunk);
+ for (nitems = i = 1; nitems <= i; i *= 2)
+ nitems = i;
+ if (nitems > 0x7fff)
+ nitems = 0x40000;
do {
+ num_open.rlim_max = sizeof(*memchunk) * (size_t)nitems;
+ sprintf(strbuff, fmt, num_open.rlim_max);
+ fprintf(stderr, "allocating memchunk %s byte array\n", strbuff);
memchunk = malloc(sizeof(*memchunk) * (size_t)nitems);
- if (!memchunk)
+ if (!memchunk) {
+ fprintf(stderr, "memchunk, malloc() failed\n");
nitems /= 2;
+ }
} while (nitems && !memchunk);
if (!memchunk) {
store_errmsg("memchunk, malloc() failed", our_errno());
@@ -199,6 +207,8 @@ static int rlimit(int keep_open)
/* initialize it to fight lazy allocation */
+ fprintf(stderr, "initializing memchunk array\n");
+
for (i = 0; i < nitems; i++)
memchunk[i] = -1;
@@ -214,7 +224,11 @@ static int rlimit(int keep_open)
}
else {
/* a huge number of file descriptors */
- num_open.rlim_max = INT_MAX / sizeof(*fd);
+ for (nitems = i = 1; nitems <= i; i *= 2)
+ nitems = i;
+ if (nitems > 0x7fff)
+ nitems = 0x40000;
+ num_open.rlim_max = nitems;
}
/* verify that we won't overflow size_t in malloc() */
@@ -249,6 +263,8 @@ static int rlimit(int keep_open)
/* initialize it to fight lazy allocation */
+ fprintf(stderr, "initializing fd array\n");
+
for (num_open.rlim_cur = 0;
num_open.rlim_cur < num_open.rlim_max;
num_open.rlim_cur++)