libdrm: add timeout handling to drmWaitVBlank
authorJesse Barnes <jbarnes@virtuousgeek.org>
Wed, 7 Jan 2009 18:18:08 +0000 (10:18 -0800)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Wed, 7 Jan 2009 18:18:08 +0000 (10:18 -0800)
commitf4f76a6894b40abd77f0ffbf52972127608b9bca
tree0be1812ebe7961b026339d2de8e9c69e6c224725
parenta8c548034e38d7fb8afeca100230818b3cfcb9d9
libdrm: add timeout handling to drmWaitVBlank

In some cases, vblank interrupts may be disabled or otherwise broken.
The kernel has a 3s timeout builtin to handle these cases, but the X
server's SIGALM for cursor handling may interrupt vblank wait ioctls,
causing libdrm to restart the ioctl, making the kernel's timeout
useless.

This change tracks time across ioctl restarts and returns EBUSY to the
caller if the expected vblank sequence doesn't occur within 1s of the
first call.

Fixes fdo bz #18041, which is caused by a drmWaitVBlank hanging due to
the corresponding pipe getting disabled (thus preventing further events
from coming in).
libdrm/Makefile.am
libdrm/xf86drm.c