+#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)
+ printf ("setrlimit: RLIMIT_DATA: %m\n");
+ }
+ else
+ printf ("getrlimit: RLIMIT_DATA: %m\n");
+#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. */
+ if (setpgid (0, 0) != 0)
+ printf ("Failed to set the process group ID: %m\n");
+