diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-04-03 09:51:49 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-04-03 13:40:48 +0100 |
commit | bd292436ed0bbc06552fc77c2f10bd02a4d7c797 (patch) | |
tree | 593f82e72dfd433dd7c8f54c42cbc7f0ca1e5706 /lib | |
parent | cb12d05e79aedaf4f1873b1262b7eeb127e87e80 (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>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/igt_aux.c | 6 |
1 files changed, 6 insertions, 0 deletions
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; |