summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2016-04-03 09:51:49 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2016-04-03 13:40:48 +0100
commitbd292436ed0bbc06552fc77c2f10bd02a4d7c797 (patch)
tree593f82e72dfd433dd7c8f54c42cbc7f0ca1e5706
parentcb12d05e79aedaf4f1873b1262b7eeb127e87e80 (diff)
lib: Avoid assertion if sig_ioctl is unsed from a child accidentally
The timer is tied to the creator thread, i.e. it is not inheritable across fork() or clone()/pthread_create(). Using it thus causes an assertion failure in the test after the one that aborts (and so on until we perform an interruptible test correctly) - one mistake snowballs. We can stop the snowball by doing an initial check and diverting back to drmIoctl(). Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--lib/igt_aux.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/igt_aux.c b/lib/igt_aux.c
index 91f3c4eb62ee..c32569f1e890 100644
--- a/lib/igt_aux.c
+++ b/lib/igt_aux.c
@@ -115,6 +115,12 @@ sig_ioctl(int fd, unsigned long request, void *arg)
SIG_ASSERT(__igt_sigiter.tid == gettid());
memset(&its, 0, sizeof(its));
+ if (timer_settime(__igt_sigiter.timer, 0, &its, NULL)) {
+ /* oops, we didn't undo the interrupter (i.e. !unwound abort) */
+ igt_ioctl = drmIoctl;
+ return drmIoctl(fd, request, arg);
+ }
+
its.it_value = __igt_sigiter.offset;
do {
long serial;