summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-04-16 12:01:03 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2009-04-30 16:38:41 +1000
commit48a747ea8603ece6bd25ba5b1ce92c2eb91a7c01 (patch)
tree794bcbbf50b60a9c647515b5289d8acbaf9ad094
parentaa58eb609617beb5d3199dab262f96003f57ab97 (diff)
downloadxorg-driver-xf86-input-evdev-48a747ea8603ece6bd25ba5b1ce92c2eb91a7c01.tar.gz
Pre-allocate the reopen timer so we don't allocate during sigio handling.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit ddc126637404cb3d9356b7698779dcd8849f8718)
-rw-r--r--src/evdev.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/evdev.c b/src/evdev.c
index 3a60e7f..a05bd2c 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -571,8 +571,11 @@ EvdevReadInput(InputInfoPtr pInfo)
xf86RemoveEnabledDevice(pInfo);
close(pInfo->fd);
pInfo->fd = -1;
- pEvdev->reopen_left = pEvdev->reopen_attempts;
- pEvdev->reopen_timer = TimerSet(NULL, 0, 100, EvdevReopenTimer, pInfo);
+ if (pEvdev->reopen_timer)
+ {
+ pEvdev->reopen_left = pEvdev->reopen_attempts;
+ pEvdev->reopen_timer = TimerSet(pEvdev->reopen_timer, 0, 100, EvdevReopenTimer, pInfo);
+ }
} else if (errno != EAGAIN)
xf86Msg(X_ERROR, "%s: Read error: %s\n", pInfo->name,
strerror(errno));
@@ -1226,7 +1229,7 @@ EvdevOn(DeviceIntPtr device)
if (pInfo->fd == -1)
{
pEvdev->reopen_left = pEvdev->reopen_attempts;
- pEvdev->reopen_timer = TimerSet(NULL, 0, 100, EvdevReopenTimer, pInfo);
+ pEvdev->reopen_timer = TimerSet(pEvdev->reopen_timer, 0, 100, EvdevReopenTimer, pInfo);
} else
{
pEvdev->min_maj = EvdevGetMajorMinor(pInfo);
@@ -1237,6 +1240,8 @@ EvdevOn(DeviceIntPtr device)
return !Success;
}
+ pEvdev->reopen_timer = TimerSet(pEvdev->reopen_timer, 0, 0, NULL, NULL);
+
xf86FlushInput(pInfo->fd);
xf86AddEnabledDevice(pInfo);
EvdevMBEmuOn(pInfo);