Add a function to stop and fail a test after the specified number of seconds have elapsed. Signed-off-by: Thomas Wood <thomas.wood@xxxxxxxxx> --- lib/igt_core.c | 44 +++++++++++++++++++++++++++++++++++++++++--- lib/igt_core.h | 2 ++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/lib/igt_core.c b/lib/igt_core.c index 6f137ab..238068c 100644 --- a/lib/igt_core.c +++ b/lib/igt_core.c @@ -618,9 +618,12 @@ void igt_fail(int exitcode) if (test_child) exit(exitcode); - if (in_subtest) - exit_subtest("FAIL"); - else { + if (in_subtest) { + if (exitcode == 78) + exit_subtest("TIMEOUT"); + else + exit_subtest("FAIL"); + } else { assert(!test_with_subtests || in_fixture); if (in_fixture) { @@ -1201,3 +1204,38 @@ void igt_vlog(enum igt_log_level level, const char *format, va_list args) } else vprintf(format, args); } + +static void igt_alarm_handler(int signal) +{ + /* subsequent tests are skipped */ + skip_subtests_henceforth = SKIP; + + /* exit with status 78 to indicate timeout */ + igt_fail(78); +} + +/** + * igt_set_timeout: + * @seconds: seconds before timeout + * + * Stop the current test and skip any subsequent tests after the specified + * number of seconds have elapsed. The test will exit with "timeout" status + * (78). Any previous timer is cancelled and no timeout is scheduled if @seconds + * is zero. + * + */ +void igt_set_timeout(unsigned int seconds) +{ + struct sigaction sa; + + sa.sa_handler = igt_alarm_handler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + + if (seconds == 0) + sigaction(SIGALRM, NULL, NULL); + else + sigaction(SIGALRM, &sa, NULL); + + alarm(seconds); +} diff --git a/lib/igt_core.h b/lib/igt_core.h index 7ede0d3..63ed9a5 100644 --- a/lib/igt_core.h +++ b/lib/igt_core.h @@ -465,4 +465,6 @@ extern enum igt_log_level igt_log_level; } while (0) +void igt_set_timeout(unsigned int timeout); + #endif /* IGT_CORE_H */ -- 1.9.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx