From e65c69b995590ccd7f209b1e516819b1248d4e38 Mon Sep 17 00:00:00 2001 From: Thomas Wood Date: Thu, 16 Jul 2015 17:39:59 +0100 Subject: lib: exit immediately if igt_fail is called in an exit handler Exit immediately if the test is already exiting and igt_fail is called. This can happen if an igt_assert fails in an exit handler. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91349 Signed-off-by: Thomas Wood --- lib/igt_core.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'lib/igt_core.c') diff --git a/lib/igt_core.c b/lib/igt_core.c index 1a453d73..af3d8731 100644 --- a/lib/igt_core.c +++ b/lib/igt_core.c @@ -221,6 +221,7 @@ static const char *in_subtest = NULL; static struct timespec subtest_time; static bool in_fixture = false; static bool test_with_subtests = false; +static bool in_atexit_handler = false; static enum { CONT = 0, SKIP, FAIL } skip_subtests_henceforth = CONT; @@ -945,6 +946,11 @@ void igt_fail(int exitcode) igt_debug_wait_for_keypress("failure"); + /* Exit immediately if the test is already exiting and igt_fail is + * called. This can happen if an igt_assert fails in an exit handler */ + if (in_atexit_handler) + _exit(IGT_EXIT_FAILURE); + if (!failed_one) igt_exitcode = exitcode; @@ -1410,6 +1416,8 @@ static void call_exit_handlers(int sig) static void igt_atexit_handler(void) { + in_atexit_handler = true; + restore_all_sig_handler(); if (!exit_handler_disabled) -- cgit v1.2.3