From mboxrd@z Thu Jan 1 00:00:00 1970 From: Damien Lespiau Subject: Re: [PATCH i-g-t 1/2] lib: add igt_set_timeout Date: Mon, 12 May 2014 14:31:46 +0100 Message-ID: <20140512133146.GA308@strange.amr.corp.intel.com> References: <1399890921-13068-1-git-send-email-thomas.wood@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mga03.intel.com (mga03.intel.com [143.182.124.21]) by gabe.freedesktop.org (Postfix) with ESMTP id 01F536E2F1 for ; Mon, 12 May 2014 06:36:19 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1399890921-13068-1-git-send-email-thomas.wood@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Thomas Wood Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org 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 Looks like a useful helper to have in any case. Both patches are: Acked-by: Damien Lespiau -- 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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx