--- xorg-server-1.6.4/hw/xfree86/common/xf86Events.c.orig 2009-11-06 17:27:55.000000000 -0500 +++ xorg-server-1.6.4/hw/xfree86/common/xf86Events.c 2009-11-06 17:30:46.000000000 -0500 @@ -268,13 +268,14 @@ xf86Wakeup(pointer blockData, int err, p (FD_ISSET(pInfo->fd, &devicesWithInput) != 0)) { int sigstate = xf86BlockSIGIO(); - pInfo->read_input(pInfo); - xf86UnblockSIGIO(sigstate); /* * Remove the descriptior from the set because more than one * device may share the same file descriptor. */ FD_CLR(pInfo->fd, &devicesWithInput); + + pInfo->read_input(pInfo); + xf86UnblockSIGIO(sigstate); } pInfo = pInfo->next; }