diff mbox

[i-g-t] lib/igt_core.c: Flag the test as failing after a segfault

Message ID 1431956251-26746-1-git-send-email-derek.j.morton@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Derek Morton May 18, 2015, 1:37 p.m. UTC
fatal_signal_handler() was trapping fatal errors but not
flagging the test as failing or setting an exit code.
The result was that the test would return Ok or Skipped
depending on what the other subtests did even though one
of the subtests had segfaulted.

Signed-off-by: Derek Morton <derek.j.morton@intel.com>
---
 lib/igt_core.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Daniel Vetter May 18, 2015, 3:14 p.m. UTC | #1
On Mon, May 18, 2015 at 02:37:31PM +0100, Derek Morton wrote:
> fatal_signal_handler() was trapping fatal errors but not
> flagging the test as failing or setting an exit code.
> The result was that the test would return Ok or Skipped
> depending on what the other subtests did even though one
> of the subtests had segfaulted.
> 
> Signed-off-by: Derek Morton <derek.j.morton@intel.com>

This isn't the first trouble with our signal handler and test results. Can
you perhaps write a library unit test for this bug?

They're in lib/tests and executed with make check.

Thanks, Daniel

> ---
>  lib/igt_core.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/igt_core.c b/lib/igt_core.c
> index 8a1a249..b29f7e3 100644
> --- a/lib/igt_core.c
> +++ b/lib/igt_core.c
> @@ -1433,8 +1433,15 @@ static void fatal_sig_handler(int sig)
>  			igt_assert_eq(write(STDERR_FILENO, ".\n", 2), 2);
>  		}
>  
> -		if (in_subtest && crash_signal(sig))
> +		if (in_subtest && crash_signal(sig)) {
> +			/* Linux standard to return exit code as 128 + signal */
> +			if (!failed_one)
> +				igt_exitcode = 128 + sig;
> +
> +			failed_one = true;
> +
>  			exit_subtest("CRASH");
> +		}
>  		break;
>  	}
>  
> -- 
> 1.9.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Derek Morton May 19, 2015, 9:42 a.m. UTC | #2
I will take a look and submit a test as a separate patch.

//Derek

-----Original Message-----
From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch] On Behalf Of Daniel Vetter
Sent: Monday, May 18, 2015 4:14 PM
To: Morton, Derek J
Cc: intel-gfx@lists.freedesktop.org; Wood, Thomas
Subject: Re: [Intel-gfx] [PATCH i-g-t] lib/igt_core.c: Flag the test as failing after a segfault

On Mon, May 18, 2015 at 02:37:31PM +0100, Derek Morton wrote:
> fatal_signal_handler() was trapping fatal errors but not flagging the 
> test as failing or setting an exit code.
> The result was that the test would return Ok or Skipped depending on 
> what the other subtests did even though one of the subtests had 
> segfaulted.
> 
> Signed-off-by: Derek Morton <derek.j.morton@intel.com>

This isn't the first trouble with our signal handler and test results. Can you perhaps write a library unit test for this bug?

They're in lib/tests and executed with make check.

Thanks, Daniel

> ---
>  lib/igt_core.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/igt_core.c b/lib/igt_core.c index 8a1a249..b29f7e3 
> 100644
> --- a/lib/igt_core.c
> +++ b/lib/igt_core.c
> @@ -1433,8 +1433,15 @@ static void fatal_sig_handler(int sig)
>  			igt_assert_eq(write(STDERR_FILENO, ".\n", 2), 2);
>  		}
>  
> -		if (in_subtest && crash_signal(sig))
> +		if (in_subtest && crash_signal(sig)) {
> +			/* Linux standard to return exit code as 128 + signal */
> +			if (!failed_one)
> +				igt_exitcode = 128 + sig;
> +
> +			failed_one = true;
> +
>  			exit_subtest("CRASH");
> +		}
>  		break;
>  	}
>  
> --
> 1.9.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
diff mbox

Patch

diff --git a/lib/igt_core.c b/lib/igt_core.c
index 8a1a249..b29f7e3 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -1433,8 +1433,15 @@  static void fatal_sig_handler(int sig)
 			igt_assert_eq(write(STDERR_FILENO, ".\n", 2), 2);
 		}
 
-		if (in_subtest && crash_signal(sig))
+		if (in_subtest && crash_signal(sig)) {
+			/* Linux standard to return exit code as 128 + signal */
+			if (!failed_one)
+				igt_exitcode = 128 + sig;
+
+			failed_one = true;
+
 			exit_subtest("CRASH");
+		}
 		break;
 	}