From 63b11dd19b03e5c88f4cd247c2c515e3530e1eb3 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Fri, 13 Dec 2002 21:32:16 +0000 Subject: * posix/bug-regex15.c: New file. * posix/Makefile (tests): Add it. * test-skeleton.c (TEST_DATA_LIMIT): New macro, default to 64MB. (main): Set RLIMIT_DATA limit to TEST_DATA_LIMIT (or lower if need be). --- ChangeLog | 8 ++++++++ test-skeleton.c | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/ChangeLog b/ChangeLog index 94cde7eda7..d187d9d1c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2002-12-13 Roland McGrath + + * posix/bug-regex15.c: New file. + * posix/Makefile (tests): Add it. + + * test-skeleton.c (TEST_DATA_LIMIT): New macro, default to 64MB. + (main): Set RLIMIT_DATA limit to TEST_DATA_LIMIT (or lower if need be). + 2002-12-13 Ulrich Drepper * elf/dl-misc.c (_dl_debug_vdprintf): Don't depend on 5-digit PIDs. diff --git a/test-skeleton.c b/test-skeleton.c index 2b5102ba91..78a88dccb7 100644 --- a/test-skeleton.c +++ b/test-skeleton.c @@ -27,6 +27,7 @@ #include #include #include +#include /* The test function is normally called `do_test' and it is called with argc and argv as the arguments. We nevertheless provide the @@ -35,6 +36,9 @@ # define TEST_FUNCTION do_test (argc, argv) #endif +#ifndef TEST_DATA_LIMIT +# define TEST_DATA_LIMIT (64 << 20) /* Data limit (bytes) to run with. */ +#endif #define OPT_DIRECT 1000 #define OPT_TESTDIR 1001 @@ -250,6 +254,23 @@ main (int argc, char *argv[]) setrlimit (RLIMIT_CORE, &core_limit); #endif +#ifdef RLIMIT_DATA + /* Try to avoid eating all memory if a test leaks. */ + struct rlimit data_limit; + if (getrlimit (RLIMIT_DATA, &data_limit) == 0) + { + if (TEST_DATA_LIMIT == RLIM_INFINITY) + data_limit.rlim_cur = data_limit.rlim_max; + else if (data_limit.rlim_cur > (rlim_t) TEST_DATA_LIMIT) + data_limit.rlim_cur = MIN ((rlim_t) TEST_DATA_LIMIT, + data_limit.rlim_max); + if (setrlimit (RLIMIT_DATA, &data_limit) < 0) + perror ("setrlimit: RLIMIT_DATA"); + } + else + perror ("getrlimit: RLIMIT_DATA"); +#endif + /* We put the test process in its own pgrp so that if it bogusly generates any job control signals, they won't hit the whole build. */ setpgid (0, 0); -- cgit v1.2.3