diff options
-rw-r--r-- | CMakeLists.txt | 3 | ||||
-rw-r--r-- | tests/util/config.h.in | 3 | ||||
-rw-r--r-- | tests/util/piglit-util.c | 38 | ||||
-rw-r--r-- | tests/util/piglit-util.h | 2 |
4 files changed, 46 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index dab4cfdf7..aafe8b1b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,8 +96,11 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${piglit_BINARY_DIR}/bin) check_function_exists(strchrnul HAVE_STRCHRNUL) check_function_exists(fopen_s HAVE_FOPEN_S) +check_function_exists(setrlimit HAVE_SETRLIMIT) +check_include_file(sys/time.h HAVE_SYS_TIME_H) check_include_file(sys/types.h HAVE_SYS_TYPES_H) +check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H) check_include_file(sys/stat.h HAVE_SYS_STAT_H) check_include_file(unistd.h HAVE_UNISTD_H) check_include_file(fcntl.h HAVE_FCNTL_H) diff --git a/tests/util/config.h.in b/tests/util/config.h.in index a012cc377..b664adc28 100644 --- a/tests/util/config.h.in +++ b/tests/util/config.h.in @@ -1,7 +1,10 @@ #cmakedefine HAVE_STRCHRNUL #cmakedefine HAVE_FOPEN_S +#cmakedefine HAVE_SETRLIMIT #cmakedefine HAVE_FCNTL_H #cmakedefine HAVE_SYS_STAT_H #cmakedefine HAVE_SYS_TYPES_H +#cmakedefine HAVE_SYS_TIME_H +#cmakedefine HAVE_SYS_RESOURCE_H #cmakedefine HAVE_UNISTD_H diff --git a/tests/util/piglit-util.c b/tests/util/piglit-util.c index 78722d94b..22941fd7a 100644 --- a/tests/util/piglit-util.c +++ b/tests/util/piglit-util.c @@ -33,6 +33,14 @@ #include <errno.h> #include <sys/stat.h> +#include "config.h" +#if defined(HAVE_SYS_TIME_H) && defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_SETRLIMIT) +#include <sys/time.h> +#include <sys/resource.h> +#include <errno.h> +#define USE_SETRLIMIT +#endif + #include "piglit-util.h" void piglit_glutInit(int argc, char **argv) @@ -473,3 +481,33 @@ char *strchrnul(const char *s, int c) return (t == NULL) ? ((char *) s + strlen(s)) : t; } #endif + + +void +piglit_set_rlimit(unsigned long lim) +{ +#if defined(USE_SETRLIMIT) + struct rlimit rl; + if (getrlimit(RLIMIT_AS, &rl) != -1) { + printf("Address space limit = %lu, max = %lu\n", + (unsigned long) rl.rlim_cur, + (unsigned long) rl.rlim_max); + + if (rl.rlim_max > lim) { + printf("Resetting limit to %lu.\n", lim); + + rl.rlim_cur = lim; + rl.rlim_max = lim; + if (setrlimit(RLIMIT_AS, &rl) == -1) { + printf("Could not set rlimit " + "due to: %s (%d)\n", + strerror(errno), errno); + } + } + } + + printf("\n"); +#else + printf("Cannot reset rlimit on this platform.\n\n"); +#endif +} diff --git a/tests/util/piglit-util.h b/tests/util/piglit-util.h index a7b28fc04..da4c844d9 100644 --- a/tests/util/piglit-util.h +++ b/tests/util/piglit-util.h @@ -319,5 +319,7 @@ extern void piglit_require_vertex_shader(void); char *strchrnul(const char *s, int c); #endif +extern void piglit_set_rlimit(unsigned long lim); + static const GLint PIGLIT_ATTRIB_POS = 0; static const GLint PIGLIT_ATTRIB_TEX = 1; |