summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-08-09 13:03:57 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2017-12-13 19:12:20 +0000
commitea7015f1fabbdfdd52a145162c658d2e90161ec5 (patch)
tree090d7555c96d9e6098e77fdb082bfea310ec63d8
parentbab762ddef24057a6b07568db3734791b6e6b930 (diff)
lib/core: Don't leak dummyloads between subtests
If a test fails or skips early, it may not clean up after itself. In lieu of having a framework for test deconstructors, hook igt_terminate_spin_batches() into exit_subtest() itself so that we don't allow a recursive batch from an earlier test to leak into the next and cause an unexpected GPU hang. Similarly, we also want to terminate the dummyload as the first step in our atexit handlers (currently it is at the start of the last step) as some atexit handlers may be unwittingly exposed to dummyloads and so cause another wait on GPU hang. We trust that the core already distinguishes correctly between the principal test process and its children. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
-rw-r--r--lib/igt_core.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/igt_core.c b/lib/igt_core.c
index 777687b5..558a538d 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -63,6 +63,7 @@
#include "intel_chipset.h"
#include "intel_io.h"
#include "igt_debugfs.h"
+#include "igt_dummyload.h"
#include "version.h"
#include "config.h"
@@ -994,6 +995,8 @@ static void exit_subtest(const char *result)
(!__igt_plain_output) ? "\x1b[0m" : "");
fflush(stdout);
+ igt_terminate_spin_batches();
+
in_subtest = NULL;
siglongjmp(igt_subtest_jmpbuf, 1);
}
@@ -1817,6 +1820,8 @@ static void call_exit_handlers(int sig)
{
int i;
+ igt_terminate_spin_batches();
+
if (!exit_handler_count) {
return;
}