[PATCH] xf86drm.c: add counter for ioctl restarting
Anton V. Boyarshinov
boyarsh at altlinux.org
Fri Apr 13 06:26:42 PDT 2012
In some cases ioclt->alarm->ioctl loop can be infinite:
ioctl(7, 0x40086482, 0xbfb62738) = ? ERESTARTSYS (To be restarted)
--- SIGALRM (Alarm clock) @ 0 (0) ---
sigreturn() = ? (mask now [])
ioctl(7, 0x40086482, 0xbfb62738) = ? ERESTARTSYS (To be restarted)
and forever.
It seems, that limiting ioctl restarting by some resonable number of trys
is a dirty but working way to prevent Xorg lockups.
Signed-off-by: Anton V. Boyarshinov <boyarsh at altlinux.org>
---
xf86drm.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/xf86drm.c b/xf86drm.c
index 6ea068f..9663f21 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -162,10 +162,11 @@ int
drmIoctl(int fd, unsigned long request, void *arg)
{
int ret;
+ int count=0;
do {
ret = ioctl(fd, request, arg);
- } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN) && ++count < 100 );
return ret;
}
--
1.7.5.4
More information about the dri-devel
mailing list