summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2015-08-07 19:01:23 +0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-08-12 14:46:40 +0200
commit370c9897230b4d4973d0a2ab641901081108d97b (patch)
tree4c8294a71fe9d2232335c4b66d19b0e4efae18ce /lib
parent24617ef82a4c58766675b3f1e4c194ca37fe9744 (diff)
lib/core: Add optional reason for timeout failure
"Timed out" isn't a terribly informative message, allow users to set something more informative. Inspired by a request from Jesse. Cc: Jesse Barnes <jbarnes@virtuousgeek.org> Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/igt_core.c12
-rw-r--r--lib/igt_core.h3
-rw-r--r--lib/igt_debugfs.c4
-rw-r--r--lib/tests/igt_timeout.c2
4 files changed, 15 insertions, 6 deletions
diff --git a/lib/igt_core.c b/lib/igt_core.c
index af3d8731..e2c2502b 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -1748,9 +1748,13 @@ out:
free(line);
}
+static const char *timeout_op;
static void igt_alarm_handler(int signal)
{
- igt_info("Timed out\n");
+ if (timeout_op)
+ igt_info("Timed out: %s\n", timeout_op);
+ else
+ igt_info("Timed out\n");
/* exit with failure status */
igt_fail(IGT_EXIT_FAILURE);
@@ -1759,6 +1763,7 @@ static void igt_alarm_handler(int signal)
/**
* igt_set_timeout:
* @seconds: number of seconds before timeout
+ * @op: Optional string to explain what operation has timed out in the debug log
*
* Fail a test and exit with #IGT_EXIT_FAILURE status after the specified
* number of seconds have elapsed. If the current test has subtests and the
@@ -1768,7 +1773,8 @@ static void igt_alarm_handler(int signal)
* Any previous timer is cancelled and no timeout is scheduled if @seconds is
* zero.
*/
-void igt_set_timeout(unsigned int seconds)
+void igt_set_timeout(unsigned int seconds,
+ const char *op)
{
struct sigaction sa;
@@ -1776,6 +1782,8 @@ void igt_set_timeout(unsigned int seconds)
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
+ timeout_op = op;
+
if (seconds == 0)
sigaction(SIGALRM, NULL, NULL);
else
diff --git a/lib/igt_core.h b/lib/igt_core.h
index 83eac02b..1a324ee8 100644
--- a/lib/igt_core.h
+++ b/lib/igt_core.h
@@ -732,7 +732,8 @@ extern enum igt_log_level igt_log_level;
} while (0)
-void igt_set_timeout(unsigned int seconds);
+void igt_set_timeout(unsigned int seconds,
+ const char *op);
FILE *__igt_fopen_data(const char* igt_srcdir, const char* igt_datadir,
const char* filename);
diff --git a/lib/igt_debugfs.c b/lib/igt_debugfs.c
index 568154ac..6180a2aa 100644
--- a/lib/igt_debugfs.c
+++ b/lib/igt_debugfs.c
@@ -463,9 +463,9 @@ static bool read_one_crc(igt_pipe_crc_t *pipe_crc, igt_crc_t *out)
ssize_t bytes_read;
char buf[pipe_crc->buffer_len];
- igt_set_timeout(5);
+ igt_set_timeout(5, "CRC reading");
bytes_read = read(pipe_crc->crc_fd, &buf, pipe_crc->line_len);
- igt_set_timeout(0);
+ igt_set_timeout(0, NULL);
igt_assert_eq(bytes_read, pipe_crc->line_len);
buf[bytes_read] = '\0';
diff --git a/lib/tests/igt_timeout.c b/lib/tests/igt_timeout.c
index 8affa61f..d228041d 100644
--- a/lib/tests/igt_timeout.c
+++ b/lib/tests/igt_timeout.c
@@ -3,6 +3,6 @@
igt_simple_main
{
- igt_set_timeout(1);
+ igt_set_timeout(1, "Testcase");
sleep(5);
}