summaryrefslogtreecommitdiff
path: root/src/evdev_brain.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/evdev_brain.c')
-rw-r--r--src/evdev_brain.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/evdev_brain.c b/src/evdev_brain.c
index c4b6fd1..7c854d8 100644
--- a/src/evdev_brain.c
+++ b/src/evdev_brain.c
@@ -39,6 +39,7 @@
#include <xf86.h>
#include <fnmatch.h>
+#include <sys/poll.h>
#include "inotify.h"
#include "inotify-syscalls.h"
@@ -347,7 +348,7 @@ static int
evdevControl(DeviceIntPtr pPointer, int what)
{
InputInfoPtr pInfo;
- int i;
+ int i, flags;
pInfo = pPointer->public.devicePrivate;
@@ -376,6 +377,19 @@ evdevControl(DeviceIntPtr pPointer, int what)
SYSCALL (close (pInfo->fd));
pInfo->fd = -1;
}
+ if ((flags = fcntl(pInfo->fd, F_GETFL)) < 0) {
+ xf86Msg(X_ERROR, "%s: Unable to NONBLOCK inotify, using fallback. "
+ "(errno: %d)\n", pInfo->name, errno);
+ evdev_inotify = 0;
+ SYSCALL (close (pInfo->fd));
+ pInfo->fd = -1;
+ } else if (fcntl(pInfo->fd, F_SETFL, flags | O_NONBLOCK) < 0) {
+ xf86Msg(X_ERROR, "%s: Unable to NONBLOCK inotify, using fallback. "
+ "(errno: %d)\n", pInfo->name, errno);
+ evdev_inotify = 0;
+ SYSCALL (close (pInfo->fd));
+ pInfo->fd = -1;
+ }
if (!evdev_inotify) {
SYSCALL (pInfo->fd = open ("/proc/bus/usb/devices", O_RDONLY));