On Mon, May 12, 2014 at 11:35:20AM +0100, Thomas Wood wrote: > 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> Looks like a useful helper to have in any case. Both patches are: Acked-by: Damien Lespiau <damien.lespiau@xxxxxxxxx> -- Damien > --- > 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 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx