diff mbox

[i-g-t] lib: exit immediately if igt_fail is called in an exit handler

Message ID 1437065323-27185-1-git-send-email-thomas.wood@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Thomas Wood July 16, 2015, 4:48 p.m. UTC
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 <thomas.wood@intel.com>
---
 lib/igt_core.c | 8 ++++++++
 1 file changed, 8 insertions(+)
diff mbox

Patch

diff --git a/lib/igt_core.c b/lib/igt_core.c
index 1a453d7..af3d873 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)