From bd292436ed0bbc06552fc77c2f10bd02a4d7c797 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 3 Apr 2016 09:51:49 +0100 Subject: [PATCH] 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 --- lib/igt_aux.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/igt_aux.c b/lib/igt_aux.c index 91f3c4eb..c32569f1 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;