diff options
Diffstat (limited to 'test-skeleton.c')
-rw-r--r-- | test-skeleton.c | 21 |
1 files changed, 21 insertions, 0 deletions
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 <unistd.h> #include <sys/resource.h> #include <sys/wait.h> +#include <sys/param.h> /* 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); |